मैं पाठ के साथ इतिहास कैसे खोज सकता हूं जो पहले से ही zsh में प्रॉम्प्ट पर दर्ज है?


58

Zsh में, मुझे पता है कि मैं इतिहास को Ctrl+ के साथ खोज सकता हूं r। हालाँकि, अक्सर मैं तुरंत प्रॉम्प्ट पर एक कमांड टाइप करना शुरू करता हूं, लेकिन तब मुझे एहसास होता है कि मुझे इतिहास की खोज करनी चाहिए। जब मैंने Ctrl+ मारा r, तो यह इस तरह से एक खाली इतिहास खोज संकेत लाता है:

इतिहास खोज शीघ्र पूर्व नहीं भरा

ध्यान दें कि मेरे प्रॉम्प्ट पर टेक्स्ट कैसे है, लेकिन इतिहास खोज प्रॉम्प्ट पर नहीं। मैं पहले ही संकेत में पाठ के साथ इतिहास खोज कैसे शुरू करूं, इसलिए यह इस तरह दिखता है:

इतिहास खोज शीघ्र पूर्व भरा

जवाबों:


44

आप zle कीhistory-search कार्यक्षमता का उपयोग कर सकते हैं :

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

यह बांधता है Upऔर Downएक इतिहास खोज करने के लिए (अपने खुद के भागने दृश्यों के लिए समायोजित), पीछे और आगे, क्या पहले से ही प्रॉम्प्ट पर दर्ज किया गया है पर आधारित है।

इसलिए, यदि आप "विम" में प्रवेश करते हैं और हिट करते हैं Up, तो zsh आपके इतिहास के माध्यम से केवल "कमांड" के साथ शुरू होने वाले पीछे की ओर आगे बढ़ेगा।

जब आप इतिहास-खोज-अंत फ़ंक्शन (आमतौर पर स्थित /usr/share/zsh/functions/Zle/) का उपयोग करके और -endप्रत्येक पंक्ति के अंत में संलग्न होते हैं, तो आप इसके अलावा, कर्सर को लाइन के अंत में रख सकते हैं, जैसे कि आपने zsh के इतिहास से अपनी इच्छित कमांड का चयन किया है।

autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end

बहुत बहुत धन्यवाद। हालाँकि, दोनों को काम करने के लिए मुझे "bendkey" कमांड को "-end" हटाना पड़ा। मैंने आपके उत्तर को संपादित नहीं किया है क्योंकि हो सकता है कि कुछ स्थिति ऐसी हो जिसमें वे आवश्यक हों?
शॉन मैकेसी

कोई समस्या नहीं: आपके द्वारा स्पष्ट किए गए विवरण के साथ उत्तर को अपडेट किया गया।
जसोनव्रीयन

यह मेरे लिए देर से नवंबर तक काम करता था, दिसंबर 2015 जब मैंने ओह मेरे ज़ीश के नवीनतम संस्करण में अपग्रेड किया। कोई विचार? सुझाव? किसी और को यह देखकर? कैसे डीबग करें?
हैनी ने

2
@hanielabed ओह-माय-ज़श एक क्लस्टरफेस है; मुझे बिल्कुल आश्चर्य नहीं है कि यह इतिहास की खोज के रूप में मौलिक रूप से कुछ को तोड़ देगा ...
जसोनव्रीयन

1
क्या एक खाली इतिहास खोज से कर्सर के अंत तक कूदने का एक तरीका है, लेकिन एक आंशिक खोज के लिए एक ही स्थिति है? वर्तमान में बैश में यही होता है।
CMCDragonkai

19

एक और उपयोगी विकल्प है history | grep

एक उपनाम, उदाहरण के लिए असाइन करें

alias hg='history | grep'

तब आप hg whateverअपने द्वारा उपयोग किए गए आदेशों की खोज करने के लिए टाइप कर सकते हैं , जैसे

$ hg chmod                                                                                                       
 1309  chmod +x rotate_files.sh 
 1385  chmod +x rotate_files_270.sh 
 1512  chmod +x testy.sh 
 1528  chmod +x act_on_2_numbers.sh 
 2142  chmod +x ~/bin/display_tmux_pane_pwd.sh
 4532  chmod +x cat_files.rb 

मैंने इस अलियास को अपनी डॉट फाइलों में डाल दिया।


17
मुझे क्या hgयाद दिलाता है ... ओह, हाँ, मर्क्यूरियल!

12

यदि आप ओह-माय-ज़श का उपयोग कर रहे हैं , history-substring-searchतो plugins=(...)लाइन में जोड़ें ।

फिर जोड़िए

bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down

लाइन के नीचे कहीं जो पढ़ता है source $ZSH/oh-my-zsh.sh। नए टर्मिनल को सहेजें और फायर करें या source ~/.zshrcवर्तमान टर्मिनल में चलाएं ।

ध्यान दें: ^[[A टर्मिनल I (किटी) और कई अन्य लोगों के उपयोग के लिए तीर का भागने का क्रम है। अपनी पसंद के टर्मिनल में जांच करने के लिए, टाइप करें showkey -aऔर फिर वे कुंजी दबाएं जिनके लिए आप भागने का क्रम ढूंढना चाहते हैं।


यह स्पष्ट नहीं है कि यह की-मैपिंग क्या करती है, ऊपर दिया गया उत्तर बताता है "यह एक इतिहास खोज, बैकवर्ड और फॉरवर्ड को समायोजित करता है, जो कि पहले से ही प्रॉम्प्ट पर दर्ज किया गया है।"
कॉलिन डी

@ColinD को स्पष्ट करने के लिए एक नोट जोड़ा गया
joelostblom

1
सबस्ट्रिंग सर्च सबसे अच्छा है, इसके कमांड का सुपरसेट शुरू होता है। ओह-माय-ज़श उपयोगकर्ता के बिना लागू करने के brew install zsh-history-substring-searchलिए मैंने निर्देशों के लिए रेपो रीडमी की जाँच की, मैं अभी आगे जाऊंगा और उत्तर दूंगा कि मैं वास्तव में परिणाम से खुश हूं।
मर्लिन

7

आप स्क्रिप्ट का उपयोग https://github.com/zsh-users/zsh-history-substring-search पर करना चाहते हैं

जहां आप किसी भी पहले से दर्ज कमांड के किसी भी भाग में टाइप कर सकते हैं Upऔर Downमिलान कमांड के माध्यम से साइकिल को कुंजी दबा सकते हैं ।


4

मैं अत्यधिक हार्ड-कोडित सामानों का उपयोग करने के बजाय "$terminfo[kcuu1]"या उपयोग करने की सलाह देता हूं "$key[Up]", "^[[A"जो किसी विशेष प्रणाली पर काम कर सकते हैं या नहीं कर सकते हैं।

/etc/zsh/zshrcअधिक कुंजी के लिए बाहर की जाँच करें। यहाँ यह मेरे सिस्टम पर कैसा दिखता है। मुझे लगता है कि terminfoचाबियाँ परिभाषित होने की अधिक संभावना है।

key=(
    BackSpace  "${terminfo[kbs]}"
    Home       "${terminfo[khome]}"
    End        "${terminfo[kend]}"
    Insert     "${terminfo[kich1]}"
    Delete     "${terminfo[kdch1]}"
    Up         "${terminfo[kcuu1]}"
    Down       "${terminfo[kcud1]}"
    Left       "${terminfo[kcub1]}"
    Right      "${terminfo[kcuf1]}"
    PageUp     "${terminfo[kpp]}"
    PageDown   "${terminfo[knp]}"
)

4

उपयोग करने के बारे में क्या zsh-autosuggestions?

बात यह है कि, प्रत्येक कमांड के लिए आप इस प्लगइन को टाइप करेंगे, आपको कुछ सुझाव दिखाएंगे जिन्हें स्वीकार किया जा सकता है या नहीं। इसे आज़माएं और हमें कुछ प्रतिक्रिया दें।

कोई प्लगइन्स नहीं होने से हम Ctrlrइतिहास पर एक रिवर्स खोज करने के लिए प्रेस कर सकते हैं , जैसे ही आप मेल खाने वाले कमांड टाइप करना शुरू करेंगे, सुझाव के रूप में दिखाई देंगे।


2

मैं vi- मोड प्लगइन का उपयोग करता हूं । और फिर मेरे ~ / .zshrc में मेरे पास निम्नलिखित बाइंडिंग हैं:

bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward

यही कारण है कि मुझे इस्तेमाल करने के लिए सक्षम बनाता है ^Pऔर ^Nसामान्य रूप से पिछड़े और आगे खोज के रूप में अगर मैं किसी भी पाठ दर्ज नहीं है, और के रूप में फ़िल्टर किए गए खोज करता है, तो मुझे क्या करना।


1

मैं रसोइये से सहमत हूं कि "प्रतिस्थापन" खोज अधिक उपयोगी है। मैं वहाँ टिप्पणी नहीं कर सकता इसलिए मैंने एक नया उत्तर शुरू किया। मैं ओह-माय-ज़श का उपयोग करता हूं, और ~ / .zzrc के प्लगइन्स = (...) में "इतिहास-प्रतिस्थापन-खोज" जोड़ता हूं। फिर स्रोत ~ / .zshrc ज्यादा कुछ जोड़ने की जरूरत नहीं है। सत्यापित करने के लिए "bindkey" का उपयोग करें:

"^ [OA" इतिहास-प्रतिस्थापन-खोज-अप
"^ [ओबी" इतिहास-प्रतिस्थापन-खोज-डाउन

बाद में, आप "टू" और अप एरो टाइप करते हैं, "हिस्ट्री" दिखाई देगा और "हाइलाइट" (यदि आपने पहले "हिस्ट्री" कमांड का उपयोग किया है)।


1

आप इसके बजाय जबड़े का उपयोग कर सकते हैं , जो आपकी खोज को पूरी तरह से बेहतर बहु ​​खोजशब्द सुपर खोज के साथ बदल देता है, और आपकी समस्या को भी ठीक करता है - इतिहास की खोज केवल उन चीजों में से एक है जो जबड़े खोज सकते हैं।

लघु परिचय / चर्चा यहाँ


0

क्योंकि मैं ओह-माय-ज़श का उपयोग करता हूं, और मैं जोएलोस्टॉब्लॉम, जेम्स से सबस्ट्रिंग समाधान का उपयोग करता हूं, मैं .zshrc को इस तरह से संशोधित करता हूं: (जो 13 पंक्ति में है, लाइन "स्रोत $ ZSH / oh-my-zsh.sh" ढूंढें) , फिर इसके चारों ओर कोड को संशोधित करें।)

plugins=(
  git
  history-substring-search
)

source $ZSH/oh-my-zsh.sh

bindkey -v
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down

bindkey -vctrl-a, ctrl-e को तोड़ देगा। सबसे अधिक संभावना है कि सभी ctrl कमांड।
माइकल ओजेरान्सकी

0

गैर-ओह-मेरा-ज़श जवाब

यह मेरे लिए काम कर रहा था (macOS पर) इतिहास को बदलने के लिए आसानी से ऊपर / नीचे तीर के माध्यम से पहुँचा जा सकता है। कुंजी बंधन आप पर निर्भर है।

खोज इतिहास को प्रतिस्थापित करना केवल एक स्ट्रिंग से शुरू होने वाली कमांड तक पहुंचने से बेहतर है। यह ज्यादातर मामलों में ctrl-r की तरह है, जो ग्लब्स या रेगेक्स मिलान के बिना हैं।

Zsh-users / zsh-history-substring-search में निर्देशों से शुरू

brew install zsh-history-substring-search

# add the following to .zshrc
source /usr/local/share/zsh-history-substring-search/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down

अब इस का पूरा आनंद ले रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.