क्या मैं पुनरावर्ती इतिहास खोज को खोए बिना कमांड लाइन पर विम संपादन मोड का उपयोग कर सकता हूं?


8

मैं ज़ुशिंग हूँ और, क्योंकि मैं एक शौकीन चावला उपयोगकर्ता हूँ, मैं सिर्फ कमांड लाइन पर विम शैली संपादन का उपयोग करने के लिए बंद कर दिया। (इसका मतलब है कि अगर मैं प्रकार है कि ls foo/barऔर तय करते हैं मैं चाहता हूँ cdके बजाय, मैं हिट कर सकते हैं Esc ^शुरुआत करने के लिए और वापस हॉप करने के लिए cw cdपरिवर्तन करने के लिए lsकरने के लिए cd

यह सब बांका है, लेकिन समस्या यह है कि मैं अब Ctrl+Rपुनरावर्ती इतिहास खोज करने के लिए उपयोग नहीं कर सकता हूं । वहाँ यह करने के लिए एक और तरीका है, या मैं किसी भी तरह इसे हटाने के लिए विम कीबाइंडिंग को ओवरराइड कर सकता हूं?


एक कठिन विकल्प! garyjohnयह करने के लिए एक रास्ता JdeBPदिखाता है , और Ctrl + R वापस के लिए कीबाइंडिंग प्राप्त करने का तरीका दिखाता है! मैं दोनों तरीकों से खेलने जा रहा हूं और बाद में जवाब स्वीकार करूंगा। मैं 1) के आधार पर तय करूंगा कि कौन सी विधि मुझे आसान लगती है और 2) जो अधिक उठती है। तुम दोनों का धन्यवाद!
नाथन लॉन्ग

जवाबों:


6

बेशक आप अब Ctrl+ का उपयोग नहीं कर सकते R। यदि आप Z शेल मैनुअल से परामर्श करते हैं, तो आप देखेंगे कि कीमैप history-incremental-search-backwardमें विजेट के लिए केवल एक महत्वपूर्ण बंधन है emacs। Vi keymaps में इसके लिए कोई महत्वपूर्ण बाइंडिंग नहीं हैं।

लेकिन जैसा कि आप मैनुअल पढ़ने से भी पाएंगे (यह अध्याय 18 है।), एक कुंजी बंधन जोड़ना bindkeyकमांड के उपयोग में एक काफी सरल अभ्यास है :

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

आपको zleशेल फ़ंक्शन पर विजेट को मैप करने के लिए कमांड का उपयोग करने की भी आवश्यकता नहीं है , क्योंकि यह एक मानक विजेट है।

यदि आप Z शेल विकि पर इसी प्रश्न के उत्तर से परामर्श करते हैं , तो आप विशेष रूप से vi "कमांड" और "इन्सर्ट मोड" कीमैप में इसे जोड़ने के लिए कमांड देखेंगे:

bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward

यह भी ध्यान दें कि, जैसा कि गैरीजोन बताते हैं , vi "कमांड" कीमैप में, /चरित्र vi-history-search-backwardविजेट के लिए बाध्य है । इस विजेट और विजेट के बीच का अंतर history-incremental-search-backwardविजेट व्यवहार है जो इतिहास खोज मोड में एक बार लागू होता है। यहाँ कुछ अंतर हैं जिन्हें आप देखेंगे:

  • स्विचिंग vi मोड:
    • में खोज मोड history-incremental-search-backwardके बीच टॉगल mainऔर vicmdkeymaps जब आप आह्वान vi-cmd-modeजबकि अभी भी खोज मोड में रहने विजेट। से यानी emacsमोड presssing Escकुंजी या Ctrl+ XCtrl+ Vकुंजी के बीच खोज मोड टॉगल emacsऔर vicmdkeymaps। (लागू history-incremental-search-backwardसे vicmdकीमैप जब तक आप बाँध कुछ करने के लिए, इस प्रकार परेशानी है vi-cmd-modeमें vicmdऔर साथ ही कीमैप।)
    • खोज मोड विजेट को vi-history-search-backwardमानता है और उस खोज को समाप्त कर देगा, जिस कमांड मोड से आपने खोज में प्रवेश किया था। यानी (डिफ़ॉल्ट बाइंडिंग के साथ) कमांड मोड से खोज मोड में प्रवेश करता है और कमांड मोड में वापस चला जाता है।vi-cmd-modeaccept-line/Esc
  • किसी खोज को दोहराना:
    • में history-incremental-search-backward, history-incremental-search-backwardऔर vi-rev-repeat-searchविगेट्स दोनों को पहचाना जाता है। यानी (यह मानते हुए कि आपने ऊपर के रूप में बाइंडिंग बदल दी है) दोनों Ctrl+ Rऔर Nपूर्ववर्ती मिलान रेखा की खोज करेंगे।
    • में vi-history-search-backward, केवल vi-rev-repeat-searchविजेट पहचाना जाता है। यानी (यह मानते हुए कि आपने ऊपर के रूप में बाइंडिंग को बदल दिया है) Ctrl+ Rबीप का कारण होगा और इसे अनदेखा किया जाएगा।

मेरी मांसपेशियों की स्मृति आपको आशीर्वाद देती है!
नाथन लॉन्ग

4

बैश के vi मोड में, टाइपिंग के <Esc>/<string><Enter>लिए कमांड हिस्ट्री सर्च करेंगे <string>nइतिहास में और खोज करेंगे; Nआगे खोज करेंगे। zshell समान हो सकता है।


1
यह दिलचस्प है, हालांकि - मैं अक्सर विम में एक आंदोलन के रूप में खोज का उपयोग करता हूं। मुझे लगता है कि मैं इसका उपयोग उस आदेश के भीतर स्थानांतरित करने के लिए नहीं कर सकता, जिसका मैं वर्तमान में संपादन कर रहा हूं, क्योंकि यह इतिहास, एह खोज करने के लिए आंका गया है?
नाथन लॉन्ग

सही। लेकिन आप (कम से कम बाश में) एफ, एफ, टी, टी, ',' का उपयोग कर सकते हैं (अर्धविराम), और ',' (अल्पविराम) पंक्ति में विशेष वर्णों के आगे और पीछे जाने की आज्ञा देता है।
गैरीजोन

1

मैं उपयोग करना पसंद करता हूं:

bindkey -M vicmd '/' history-incremental-search-backward

इस तरह मैं ESC /textकमांड लाइन टाइप और देख सकता हूँ । अगर मैं अगला मैच मैं टाइप करना चाहता हूंESC n

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