জেডএসএইচ: উপরে এবং ডাউন কীগুলিতে ইতিহাস অনুসন্ধান করবেন?


22

বর্তমানে, আমার আমার .zshrc এ নিম্নলিখিতগুলি রয়েছে:

bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search

তবে এটি কেবল স্পেস অক্ষর হওয়ার আগে আমার বর্তমান ইনপুটটির সামগ্রীর সাথে মেলে বলে মনে হচ্ছে। উদাহরণস্বরূপ, sudo ls /আমার ইতিহাসে শুরু হওয়া প্রতিটি লাইনের সাথে sudoমিলবে, যখন আমি এটির সাথে কেবল আমার সম্পূর্ণ ইনপুটটির সাথে মেলে এমন লাইনগুলি মেলে চাই। (যেমন sudo ls /etcমিলবে তবে মিলবে না sudo cat /var/log/messages)

কাঙ্ক্ষিত আচরণ অর্জনের জন্য আমার কী পরিবর্তন করতে হবে?

এটি সম্পর্কিত হলে আমার সম্পূর্ণ .zshrc এখানে রয়েছে: https://gist.github.com/919566

উত্তর:


9

এটি নথিভুক্ত আচরণ :

down-line-or-search
বাফারে একটি রেখাটি নীচে সরান, বা ইতিমধ্যে নীচের লাইনে থাকলে, বাফারের প্রথম শব্দটি দিয়ে শুরু করে একটি লাইনের জন্য ইতিহাসে এগিয়ে যান search

এমন কোনও বিদ্যমান উইজেট নেই যা আপনি যা চান ঠিক তেমন করে তাই আপনার নিজের তৈরি করতে হবে। এখানে যে up-line-or-searchউইজেটটির মতো আচরণ করা হয় তা সংজ্ঞায়িত করতে হয় , তবে প্রথম শব্দটির পরিবর্তে সন্ধানের স্ট্রিং হিসাবে লাইনের শুরু (কার্সার অবধি) ব্যবহার করে। সত্যিই পরীক্ষিত নয়, বিশেষত মাল্টি-লাইন ইনপুটটিতে নয়।

up-line-or-search-prefix () {
  local CURSOR_before_search=$CURSOR
  zle up-line-or-search "$LBUFFER"
  CURSOR=$CURSOR_before_search
}
zle -N up-line-or-search-prefix

একটি বিকল্প পদ্ধতির ব্যবহার হ'ল history-beginning-search-backwardতবে কার্সার প্রথম লাইনে থাকলে কেবলমাত্র এটি কল করুন। অপরীক্ষিত।

up-line-or-history-beginning-search () {
  if [[ -n $PREBUFFER ]]; then
    zle up-line-or-history
  else
    zle history-beginning-search-backward
  fi
}
zle -N up-line-or-history-beginning-search

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

@ আরপিএস আহ, গেটচা, এটি প্রথম শব্দটি তুলেছিল কারণ তর্কটি অনুপস্থিত ছিল (খালি থাকার পরিবর্তে এটি থাকা উচিত)। আমার সম্পাদিত সংস্করণ ব্যবহার করুন।
গিলস 23'২2

33

zsh ব্যবহার করে এই কার্যকারিতা সরবরাহ করে

history-beginning-search-backward
history-beginning-search-forward

যাত্রা।

bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward


ctrl+ দ্বারা সঠিক কী কোডটি সন্ধান করুনvKEY

যাত্রা।
ctrl+ vUP
ctrl+ vDOWN
ctrl+ vPageUp
ctrl+ vPageDown
ইত্যাদি


1
কীকোডগুলির জন্য একটি বিকল্প যা বিভিন্ন টার্মিনাল জুড়ে কাজ করতে পারে জ্রেপেটো [ 1 ] এ পাওয়া যাবে । <kbd> আপ </ কেবিডি> হ'ল $terminfo[kcuu1], <kbd> ডাউন </ কেবিডি> $terminfo[kcud1]
জাস্টিন সি

8

২০১৩ সালের এই ব্লগ পোস্টটি বেশ কয়েকটি কী-বাইন্ডের সুপারিশ করেছে যা কার্সারের আগে সমস্ত শব্দের সাথে মেলে।

# Cycle through history based on characters already typed on the line
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 "$key[Up]" up-line-or-beginning-search
bindkey "$key[Down]" down-line-or-beginning-search

(এই উত্তরের পূর্ববর্তী সংস্করণে, আমি $terminfoব্লগ পোস্টের একটি মন্তব্যে প্রস্তাবিত হিসাবে ব্যবহার করেছি Some কিছু পরিভাষা মান এখানে তালিকাভুক্ত করা হয়েছে ))


1
zsh এই বন্ধুত্বপূর্ণ মধ্যে (উবুন্টু প্যাকেজের মধ্যে অন্তত) alias লেখা দেয় /etc/zsh/zshrc, যেমন $key[Up]
zzxyz

ব্যবহার করা হলে $terminfoআপনাকে টার্মিনাল মোডগুলি পরিবর্তন করতে হবে। এখানে দেখুন ।
টম হেল

আমি $key[]পরিবর্তে ব্যবহারের উত্তর সম্পাদনা করেছি $terminfo[]। আমি আশা করি এটি পাঠকদের জন্য ভাল কাজ করে!
জোয়েটউইল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.