मैं ZSH के वि-मोड में एक रिवर्स इतिहास खोज कैसे करूं?


47

मैं vimअनिवार्य रूप से अपनी सभी संपादन आवश्यकताओं के लिए उपयोग करता हूं, इसलिए मैंने एक बार फिर से अपने शेल के लिए vi-mode (वर्तमान में ZSH w / oh-my-zsh OS OS पर) की कोशिश करने का फैसला किया, लेकिन मैं खुद को Ctrl-Rलगातार उपयोग करने की कोशिश कर रहा हूं (और असफल रहा) । समतुल्य कुंजी-बाध्यकारी क्या है? और भविष्य के संदर्भ के लिए, मैं यह कैसे पता लगाऊंगा? मुझे पूरा यकीन है कि मैं bind -Pबैश में इस्तेमाल कर सकता हूं ।


2
'मैन ज़ज़्ज़ले' के अनुसार, इतिहास-वृद्धिशील-खोज-बैकवर्ड डिफ़ॉल्ट रूप से Vi मोड (vicmd, viins) में बाध्य नहीं है।
पौल

जवाबों:


56

bindkeyमौजूदा बाइंडिंग की सूची प्राप्त करने के लिए आप बिना किसी तर्क के दौड़ सकते हैं , जैसे:

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

Emacs मोड में, आप जो बाइंडिंग चाहते हैं वह है history-incremental-search-backward, लेकिन यह vi मोड में डिफ़ॉल्ट रूप से बाध्य नहीं है। अपने आप को Ctrl-R बाँधने के लिए, आप इस कमांड को चला सकते हैं, या इसे अपने साथ जोड़ सकते हैं ~/.zshrc:

bindkey "^R" history-incremental-search-backward

zshzleमैनपेज ( man zshzle) zsh की लाइन संपादक, bindkey, और Emacs / vi मोड के बारे में अधिक जानकारी नहीं है।


3
धन्यवाद, विशेष रूप से के लिए zshzle। यह काफी जानकारीपूर्ण और उपयोगी है।
हांक गे

मैं तुमसे प्यार करता हूँ। गंभीरता से। OSX El Capitan में अपग्रेड करने के बाद रिवर्स सर्च चला गया था और मैंने इसे अपने दैनिक वर्कफ़्लो में बाकी सब से अधिक याद किया।
क्रिश्चियन

24

यह एक प्राचीन प्रश्न है, लेकिन केवल (और स्वीकृत) उत्तर मूल रूप से "emacs- जैसे" history-incremental-search-backwardको vi मोड में ट्रांसप्लांट करने का एक तरीका बताता है। जबकि यह पूरी तरह से संभव है और आपके लिए सही समाधान हो सकता है, यह थोड़ा अजीब है कि किसी ने भी इतिहास को खोजने का "vi तरीका" नहीं बताया है।

vsh में v मोड मानक vi / vim कुंजियों का उपयोग करते हुए खोज इतिहास का समर्थन करता है: /और ?, दोनों कमांड मोड में उपलब्ध हैं। ( <Esc>आवेषण या कमांड मोड में स्विच करने के लिए हिट करें, जैसे vi या vim में।)

उनकी भावना उलट है, हालांकि: चूंकि आप आमतौर पर अपने शेल के इतिहास को रिवर्स में खोजना चाहते हैं, इसलिए /रिवर्स खोज ?करता है जबकि आगे की खोज करता है।

एक बार पहली हिट प्रदर्शित होने के बाद, आप (उसी तरह vi / vim में) nएक ही दिशा में अधिक हिट जारी रखने या Nखोज की दिशा को उलटने के लिए उपयोग कर सकते हैं।

vicmdकीमैप में प्रासंगिक डिफ़ॉल्ट कीबाइंडिंग हैं:

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search

2
यह भी उपयोग करने के लिए अच्छा है "^P" history-beginning-search-backwardऔर "^N" history-beginning-search-forwardविम-जैसे ऑटोकंप्लीमेंट के लिए (आप टाइप करना शुरू करें, फिर दबाएं ctrl+pया ctrl+n)।
cprn

मेरे लिए, ?ऊपर लाता है bck-i-search, जो वास्तव में मैं देख रहा था। धन्यवाद।
जियोवा 4

@ इतिहास-वृद्धिशील-खोज-पिछड़ों का लाभ यह है कि यह ग्लोब पैटर्न का समर्थन करता है। डिफ़ॉल्ट /या `? ' doesn't: coderwall.com/p/-jvcag/zsh-reverse-history-search-with-regex
alp_989

@ Alpha_989 आपके द्वारा संदर्भित ब्लॉग पोस्ट गलत है। यह हो सकता है कि लेखक के पास कुछ zsh "फ्रेमवर्क" हो जो कि ^Rकीबाइंडिंग को ओवरलोड करता हो । केवल "regex की तरह" चरित्र दोनों द्वारा समर्थित history-search-backwardऔर history-incremental-search-backwardहै ^, लाइन के शुरू होने से खोज स्ट्रिंग एंकर करने के लिए। असली शक्ति history-incremental-search-backwardयह है कि यह एक वृद्धिशील खोज करता है, जैसा कि इसके नाम से पता चलता है। मैं कल्पना कर सकता हूं कि कोई इस vicmdकारण से इसे कीमैप में बांधना चाहेगा ।
wjv

@wj, आप सही हैं .. मुझे लिखना चाहिए था history-incremental-pattern-search-backward, नहीं history-incremental-search-backwardhistory-incremental-pattern-search-backwardsशायद एक विजेट .. लेकिन मुझे लगता है कि यह डिफ़ॉल्ट रूप से zsh में स्थापित होता है। यह उन globपैटर्न का समर्थन करता है regexजैसा आपने सही ढंग से नहीं बताया है: zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators । पोस्ट में वास्तव में एक गलती है ..
अल्फा_989
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.