विम - खोज रजिस्टर में yank


81

क्या विम के "अंतिम खोज" रजिस्टर ("/") में "यांक" करने का कोई आसान / त्वरित तरीका है?

विम डॉक्यूमेंटेशन से, ऐसा प्रतीत होता है कि उत्तर नहीं है, लेकिन इसे "लेट" कमांड के माध्यम से सौंपा जा सकता है:

It is writable with ":let", you can change it to have 'hlsearch' highlight
other matches without actually searching.  You can't yank or delete into this
register.

आदर्श रूप से मैं जो करना चाहता हूं वह कुछ इस तरह है:

"/5yw

जो अगले 5 शब्दों को कर्सर के नीचे रखेगा और उन्हें अंतिम खोज बफ़र में रखेगा

वैकल्पिक रूप से, यदि नामांकित रजिस्टर की सामग्री को खोजने का कोई तरीका है, तो यह भी काम करेगा। दूसरे शब्दों में, अगर मैं कर सकता था:

"A5yw

और फिर रजिस्टर A में जो है, उसे खोजें, वह भी काम करेगा।

निकटतम मैं आ सकता है नामांकित रजिस्टर में yank करने के लिए और फिर अंतिम खोज रजिस्टर में रजिस्टर करें, जैसे

"A5yw
:let @/=@A

लंबे समय तक प्रश्न बनाने के जोखिम में, मैं यह बताना चाहता हूं कि यह हमेशा 5 शब्द नहीं है जिन्हें मैं "यंक और खोज" करना चाहता हूं - कभी-कभी यह 17 वर्णों का होता है, कभी-कभी यह रेखा के अंत में होता है, आदि ... तो एक हार्ड-कोडेड मैक्रो मुझे वह लचीलापन नहीं देता जो मैं चाहता था।

जवाबों:


110

/खोज स्ट्रिंग दर्ज करने के लिए दबाने के बाद , आप तब उपयोग कर सकते हैं Ctrl-Rऔर फिर उस रजिस्टर का प्रतिनिधित्व करने वाला पत्र टाइप करें जिसे आप उपयोग करना चाहते हैं।

जैसे।

  • सबसे पहले, "Ayw रजिस्टर ए में एक शब्द को yank करने के लिए
  • फिर, / ^R A रजिस्टर ए की सामग्री को खोज स्ट्रिंग में डालने के लिए।

1
यह बेशक काम करता है, लेकिन ऐसा लगता है कि ओपी वास्तव में खोज नहीं करना चाहता है, बस हाइलाइटिंग प्राप्त करें। अगर ऐसा है, तो एक कस्टम ऑपरेटर जाने का रास्ता होगा।
कैस्केबेल

1
सुपर - थैंक्स अर ... यही तो मुझे चाहिए था (ठीक है, बाधाओं के तहत कि सही समाधान वास्तव में पहली जगह में संभव नहीं है।) संक्षिप्त समाधान के लिए धन्यवाद।
दान

11
बस एक टिप्पणी ... "Ayw शब्द को 'A' रजिस्टर में नहीं भरता है .... यह 'a' रजिस्टर पर
लिखी

1
+1 कुछ समय से इस समस्या को देख रहा था, जिस समस्या को मैं हल करने की कोशिश कर रहा था, उसका सही समाधान - धन्यवाद।
५:११ बजे

8
स्पष्टता के लिए - vim रजिस्टर के मामले का उपयोग यह निर्धारित करने के लिए करता है कि क्या यह "aywसामग्री के "Aywलिए संलग्न है या इसकी जगह ले रहा है, इसलिए (निचला मामला) रजिस्टर की सामग्री को 'a' से बदल देगा, जबकि 'a' को पंजीकृत करने के लिए अपील करेगा
पीटर गिब्सन

40

यदि आप किसी भी रजिस्टर का उपयोग नहीं करते हैं, तो रक्षित पाठ vim के रजिस्टर को संग्रहीत करने के लिए 0। आप Ctrl-R 0उसके बाद टाइप करके खोज सकते हैं /

एक और अधिक जटिल उदाहरण। यह कहें कि आप उद्धरण के अंदर पाठ के लिए एक और बफर में खोजना चाहते हैं जो अभी कर्सर के नीचे है:

  • आप ऐसा कर सकते हैं yi"(यांक आंतरिक उद्धरण)
  • उस बफ़र पर जाएँ जहाँ आप खोजना चाहते हैं
  • प्रकार /Ctrl-R 0

1
मैंने इस समाधान को a'r की तुलना में अधिक उपयोगी पाया क्योंकि बार-बार आयोजित करने "Ayw से रजिस्टर ए में एक जोड़ा हुआ स्ट्रिंग पैदा होता है। लेकिन बस टाइप करना ywऔर फिर टाइप करने के Ctrl-R 0बाद /हमेशा वही होता है जो मैंने किया था।
डेविड जंग

10

मैं उसके लिए निम्नलिखित कोड का उपयोग कर रहा हूं:

vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR>
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR>

    function! VisualSearch(dirrection)
        let l:register=@@
        normal! gvy
        let l:search=escape(@@, '$.*/\[]')
        if a:dirrection=='/'
            execute 'normal! /'.l:search
        else
            execute 'normal! ?'.l:search
        endif
        let @/=l:search
        normal! gV
        let @@=l:register
    endfunction

यदि यह स्पष्ट नहीं है, तो यह आपको दृश्य मोड में कुछ पाठ का चयन करने की अनुमति देता है, और उस पाठ को खोजने के लिए * या # का उपयोग करता है।
एडवर्ड एंडरसन

6

एक चयन के लिए खोज:

यदि आप पहले एक पंक्ति के एक खंड को yank करना चाहते हैं, तो "v" का उपयोग करें और जब तक आप जो चाहते हैं उसे चिह्नित नहीं कर लेते, तब तक y के लिए y दबाएँ और अब चयन रजिस्टर में है।

फिर आप टाइप कर सकते हैं /Ctrl-R 0


5

तो मूल रूप से # और * कमांड का एक विस्तारित संस्करण, सही? ऐसा लगता है कि आप एक कस्टम ऑपरेटर (एक कमांड जो एक गति की उम्मीद करता है) को परिभाषित करना चाहते हैं। मैंने वास्तव में ऐसा कभी नहीं किया है, लेकिन मुझे एक प्लगइन मिला है जो ऐसा दिखता है कि ऐसा करना आसान हो सकता है। कुछ उदाहरण दिए गए हैं।

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