স্থানীয় এবং বিশ্বব্যাপী জেডএসএইচ ইতিহাসের জন্য পৃথক করে তীর লুকব্যাক করুন


25

এটা কি সম্ভব...

  • স্থানীয় জেডএসএইচ শেল ইতিহাস সরিয়ে নিন (ক্রিয়াগুলি কেবলমাত্র সেই প্রম্পটে ঘটে)

  • গ্লোবাল জেডএসএইচ ইতিহাসে পদক্ষেপ নিন (ভাগ করা ইতিহাস চালু আছে) - যখন ভাগ করা ইতিহাস চালু থাকে আপনি ইউপি তীর টিপুন তখন ডিফল্ট হবে

... পৃথকভাবে।

উদাহরণস্বরূপ, কেউ বিশ্ব ইতিহাসের জন্য সিটিআরএল + বেঁধে রাখতে পারে, স্থানীয় ইতিহাসের জন্য স্বাভাবিক। একই সাথে পশ্চাদ্বরের ইতিহাস অনুসন্ধানের জন্য বিশ্বব্যাপী ইতিহাসটি ব্যবহার করা বুদ্ধিমান হয়ে যায় (যেমন CTRL+ R))

এটি কিছু শেল অপারেশনকে ত্বরান্বিত করতে পারে, কারণ কিছু অপারেশন সেই শেল উইন্ডোতে সুনির্দিষ্ট এবং আপনি সেগুলিতে ফিরে যেতে চান।

উত্তর:


25

এটি অনুলিপি করুন এবং এতে আটকান .zshrc:

কার্সাররা স্থানীয় ইতিহাস ব্যবহার করছে:

bindkey "${key[Up]}" up-line-or-local-history
bindkey "${key[Down]}" down-line-or-local-history

up-line-or-local-history() {
    zle set-local-history 1
    zle up-line-or-history
    zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
    zle set-local-history 1
    zle down-line-or-history
    zle set-local-history 0
}
zle -N down-line-or-local-history

CTRLবিশ্বব্যাপী ইতিহাসে পদক্ষেপ নিতে যদি আপনার কী কী বাঁধাইয়ের ( + কার্সার) প্রয়োজন হয় তবে এটিও আপনার যুক্ত করুন .zshrc:

bindkey "^[[1;5A" up-line-or-history    # [CTRL] + Cursor up
bindkey "^[[1;5B" down-line-or-history  # [CTRL] + Cursor down

এই কাজটি করার জন্য SHARE_HISTORY বিকল্পটি ( 16.2.4 ইতিহাস দেখুন ) সক্ষম করা দরকার। setopt"শেয়ারহিস্টিরি" তালিকাভুক্ত কিনা তা চালান এবং পরীক্ষা করুন। যোগ না setopt sharehistoryহলে আপনার .zshrc। তারপরে কেউ আমাদের উপরে যেমন করে সেট-লোকাল-ইতিহাস ব্যবহার করতে পারে। দলিলপত্র বলছে:

ডিফল্টরূপে, ইতিহাস মুভমেন্ট কমান্ডগুলি আমদানিকৃত লাইনগুলি পাশাপাশি স্থানীয় লাইনগুলিও পরিদর্শন করে তবে আপনি সেট-স্থানীয়-ইতিহাসের জেল বাইন্ডিং দিয়ে এটিকে চালু এবং বন্ধ করতে পারেন। এমন একটি জেল উইজেট তৈরি করাও সম্ভব যা কিছু কমান্ড আমদানি করা আদেশগুলিকে উপেক্ষা করবে এবং কিছু তাদের অন্তর্ভুক্ত করবে।

নোট করুন যে ডিফল্টরূপে বিশ্বব্যাপী ইতিহাস ব্যবহৃত হয় (এবং সমস্ত ফাংশন "zle set-স্থানীয়-ইতিহাস 0" দিয়ে শেষ হয়, অর্থাৎ স্থানীয় ইতিহাস অক্ষম থাকে)। সুতরাং CTRL+ টিপুন Rবিশ্বব্যাপী ইতিহাস ডিফল্টরূপে অনুসন্ধান করবে (যা বেশিরভাগ ক্ষেত্রেই বোঝায়)।

এটি @ এমপি দ্বারা সমাধানের সাথে বেশ মিল, তবে অনুলিপি এবং পেস্টের জন্য প্রস্তুত। এটি কার্সার কীগুলি উপরে এবং নীচে ওভাররাইট করে। আমি এই মেল তালিকা এন্ট্রি ব্যবহার করেছি ।

আরো দেখুন:


1
Zsh 5.0.2 এ আমি একটি ত্রুটি পেয়েছি যা এটি খালি কী ক্রমের সাথে আবদ্ধ হতে পারে না। এমনকি যদি আমি এটি নীচে অন্য উত্তর থেকে কীগুলি দিয়ে প্রতিস্থাপন করি তবে আপ / ডাউন এবং সিটিআরএল + আপ / ডাউন উভয়ই বিশ্বব্যাপী ইতিহাসের মধ্য দিয়ে যায়। আমি এখানে কিছু ভুল করছি?
rjh

1
@ আরজেএইচ: এটি চেষ্টা করুন: ভিএম এর মতো সম্পাদকটিতে, মুছুন ${key[Up]}। তারপরে (সম্পাদনা মোডে), Ctrl + V টাইপ করুন তারপরে তীরটি অনুসরণ করুন। এটিতে সঠিক কী কোডটি সন্নিবেশ করা উচিত। ডাউন তীরের জন্য একই করুন।
রবিনস্ট

আমি এই পদ্ধতিটি ব্যবহার করেছি এবং এটি কাজ করে তবে আমি একটি কমান্ডের প্রাথমিক অংশ লিখে তারো আপের সাহায্যে ইতিহাস অনুসন্ধানের ক্ষমতা হারিয়ে ফেলেছি। এটি বাশের মতো সমস্ত কমান্ড দিয়ে যায়, তাই আমাকে ব্যবহার করে প্রায় কাজ করতে হবে Ctrl+R
ম্লেবিয়াস

5

আপনি কেবল স্থানীয় ইতিহাসের আইটেমগুলি দেখানোর জন্য একটি বিশেষ জেল উইজেট সেটআপ করতে পারেন:

function only-local-history () {
        zle set-local-history 1
        zle up-history
        zle set-local-history 0
}
zle -N only-local-history

ধরে নিয়ে, যে আবদ্ধ হয় up-line-or-history(আমি মনে করি যে ডিফল্ট), আপনি অন্য কী স্ট্রোক এই উইজেট মত আবদ্ধ করতে পারেন CTRL+ + :

 bindkey "^[Oa" only-local-history

যদি এটি কাজ করে তবে সম্ভবত আপনার টার্মিনালের উপর নির্ভরশীল। উপরে লাইন কাজ করে URxvt/Screen। সঙ্গে xtermআপনার প্রয়োজন হবে

 bindkey "^[[1;5A" only-local-history

জন্য CTRL+ +

আর একটি রূপ হতে পারে

function peek-history () {
        zle set-local-history
        zle up-history
        zle set-local-history
}
zle -N peek-history

সুতরাং, যদি আপনার স্থানীয় ইতিহাস সক্ষম থাকে তবে আপনি বৈশ্বিক ইতিহাসে বা তার বিপরীতে উঁকি দিতে পারেন।


4

@ লুম্বিকের উত্তর আমার জন্য কেবল কয়েকটি পরিবর্তন নিয়ে কাজ করেছে:

setopt share_history

up-line-or-local-history() {
    zle set-local-history 1
    zle up-line-or-history
    zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
    zle set-local-history 1
    zle down-line-or-history
    zle set-local-history 0
}
zle -N down-line-or-local-history

bindkey '^[OA' up-line-or-history     # Cursor up
bindkey '^[OB' down-line-or-history   # Cursor down
bindkey '^[[1;5A' up-line-or-local-history    # [CTRL] + Cursor up
bindkey '^[[1;5B' down-line-or-local-history  # [CTRL] + Cursor down

এই কোডটি বিশ্বব্যাপী ইতিহাসকে ডিফল্ট করে তোলে এবং স্থানীয় ইতিহাসের জন্য সিটিআরএল-তীর ব্যবহার করে।

দ্রষ্টব্য: আমি ওহ-মাই-জেডএস এর সাথে জেডএস 5.0.2 ব্যবহার করি।


এটি Ctrl+arrowsস্থানীয় ইতিহাসের জন্য - ওপি যা অনুরোধ করেছে তার থেকে বিপরীত দেখাচ্ছে ।
ম্লেবিয়াস

1

আমি এখানে অন্যান্য উত্তরের তালিকাভুক্ত বিকল্পগুলি চেষ্টা করে দেখছি তবে আমি তাদের সাথে সন্তুষ্ট নই। উইজেটগুলি 1 up-history বা অনুসন্ধানের সূচনাup-line-or-history অন্তর্ভুক্ত করে না এবং উইজেট 1 ব্যবহার করার সময় স্থানীয় ইতিহাসের পছন্দগুলি পরিবর্তন করার সময় ভাল কাজ করে না বলে মনে হয়। 2 up-line-or-beginning-search

সুতরাং আমি নিম্নলিখিত সেটিংস এ এসেছি। এটি Ctrl+ তীরকে বৈশ্বিক ইতিহাস ব্রাউজ করতে সক্ষম করে , Alt+ তীরগুলি কেবল স্থানীয় ইতিহাস ব্রাশ করতে (বাশের অনুরূপ) এবং স্ট্যান্ডলোন তীরগুলি স্মার্ট শুরু অনুসন্ধান ( ওহ মাই জেডএস-এ ডিফল্ট ) ব্যবহার করতে সক্ষম করে।

up-line-or-local-history() {
    zle set-local-history 1
    zle up-line-or-search
    zle set-local-history 0
}
zle -N up-line-or-local-history

down-line-or-local-history() {
    zle set-local-history 1
    zle down-line-or-search
    zle set-local-history 0
}
zle -N down-line-or-local-history

bindkey "${key[Up]}" up-line-or-beginning-search
bindkey "${key[Down]}" down-line-or-beginning-search
bindkey "^[[1;5A" up-line-or-search    # [CTRL] + Cursor up
bindkey "^[[1;5B" down-line-or-search  # [CTRL] + Cursor down
bindkey "^[[1;3A" up-line-or-local-history    # [ALT] + Cursor up
bindkey "^[[1;3B" down-line-or-local-history  # [ALT] + Cursor up

1 তাদের downপ্রতিদ্বন্দ্বী খুব স্পষ্টভাবে বোঝানো হয়েছে।

2 অনুসন্ধানের জন্য ব্যবহৃত শুরুটি স্থানীয় ইতিহাসের পছন্দগুলি পরিবর্তনের পরে পুনরায় সংজ্ঞায়িত করা হয়, সুতরাং দ্বিতীয় প্রথম অনুসন্ধানে অনুসন্ধান করা শুরু হিসাবে পুরো প্রথম পাওয়া কমান্ডটি ব্যবহৃত হয়।


1

এখানে বিভিন্ন উত্তরের ভিত্তিতে, আমি একটি ঘনীভূত সংস্করণ তৈরি করতে সক্ষম হয়েছিল:

function up-line-or-history() {
    zle set-local-history 1
    zle .up-line-or-history
    zle set-local-history 0
}

function down-line-or-history() {
    zle set-local-history 1
    zle .down-line-or-history
    zle set-local-history 0
}

# Overwrite existing {up,down}-line-or-history widgets with the functions above.
zle -N up-line-or-history
zle -N down-line-or-history

এই সংস্করণটি বিদ্যমান এবং নতুন ব্যবহারকারী-সংজ্ঞায়িত উইজেটগুলির সাথে উইজেটগুলিকে ওভাররাইট করবে । এই উইজেটটি স্থানীয় ইতিহাস সক্ষম করে এবং তারপরে মূল উইজেটগুলি কল করবে , যা পূর্বনির্ধারিত নামের অধীনে উপলব্ধ । দেখুন zle উইজেট ডকুমেন্টেশন বিস্তারিত জানার জন্য।up-line-or-historydown-line-or-history.

এর অর্থ হ'ল আপনি যে কোনও বিদ্যমান কী-বাইন্ডিংগুলি রাখতে পারেন। অতএব আপনি আপনার বর্তমান টার্মিনালে একটি আপ-তীর টাইপ করার জন্য কীভাবে পালানো সিকোয়েন্সটি অনুগ্রহ করে তা এড়াতে পারবেন।


-1
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down

উপরের উত্তর আমার জন্য কাজ করেছে।

তথ্যসূত্র: https://coderwall.com/p/jpj_6q/zsh-better-history-searching-with-arrow-keys


আপনি কী ব্যাখ্যা করতে পারেন যে এটি কীভাবে স্থানীয় এবং বৈশ্বিক ইতিহাসকে আলাদা করে? আইএমএইচও আপনার কোডটি মোটেই তা করে না। তদুপরি, ওহ মাই জেডএস-এ এটি ইতিমধ্যে সেট করা আছে বলে মনে হচ্ছে ।
ম্লেবিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.