लाइन ब्रेक के आसपास खोज विम


12

जब मैं विम में लाटेक्स दस्तावेज़ का संपादन कर रहा हूं, तो अक्सर मैं एक वाक्यांश के लिए खोज करना चाहता हूं। क्योंकि मेरे पास लाइनों को लपेटने के लिए LaTeX सेटअप है, कभी-कभी वाक्यांश का आधा भाग एक पंक्ति में होगा जबकि दूसरा आधा अगले पर है। ऐसे मामले में, खोज में वह नहीं है जो मैं देख रहा हूं। इसलिए उदाहरण के लिए

blah blah blah hello
world blah blah blah

जब खोज का उपयोग करते हैं /hello world, तो मुझे वह नहीं मिलता है जो मैं खोज रहा हूं। इस खोज को संशोधित करने के लिए एक त्वरित और आसान तरीका है मुझे प्राप्त करने के लिए जहां मैं होना चाहता हूं? या बेहतर अभी तक, खोज स्ट्रिंग में एक जगह के साथ किसी भी सफेद स्थान (अंतरिक्ष, टैब, नई लाइन) से मेल करने के लिए विम को बताने का एक तरीका है?

जवाबों:


15

अधिक खोज के बाद, यह ऐसा करने का सबसे आसान तरीका है \_s। उदाहरण के लिए:

/hello\_sworld

4
आप चाहें hello\_s\+worldतो उन दोनों के बीच एक से अधिक व्हाट्सएप चरित्र हो सकते हैं ।
वोडिन

5

इस समस्या को http://vim.wikia.com/wiki/Search_across_multiple_lines पर संबोधित किया गया था । शामिल एक फ़ंक्शन है जो मुझे ज़रूरत है वह कर सकता है।

function! SearchMultiLine(bang, ...)
  if a:0 > 0
    let sep = (a:bang) ? '\_W\+' : '\_s\+'
    let @/ = join(a:000, sep)
  endif
endfunction
command! -bang -nargs=* -complete=tag S call SearchMultiLine(<bang>0, <f-args>)|normal! /<C-R>/<CR>

तब आप एक बहु-पंक्ति खोज का उपयोग कर सकते हैं :S hello worldऔर यह इसे रूपांतरित करेगा और इसके hello\s\+worldलिए खोज करेगा। एक और अच्छी विशेषता यह है कि यह इस नई खोज को खोज इतिहास में भी जोड़ देगा। यह q/आपको आवश्यकता पड़ने पर खोज का उपयोग करके वापस जाने और संशोधित करने की अनुमति देता है। इसका उपयोग प्रतिस्थापन के साथ करने के लिए भी किया जा सकता है :%s//new thing/g। इसका नकारात्मक पक्ष यह है कि incsearchयदि आप इसे सक्षम करते हैं तो इसका उपयोग नहीं किया जाता है।


3

जिस तरह से मुझे पता है वह कठिन नहीं है, लेकिन यह थोड़ा थकाऊ है। अपनी खोज क्वेरी में प्रत्येक स्थान को निम्नलिखित के साथ बदलें:

[ \t\n]\+

(के बाद की जगह पर ध्यान दें [।) यह वाक्यविन्यास से मेल खाता नियमित अभिव्यक्ति है। टूट गया, इसका मतलब है:

  • [...] मतलब कोष्ठक के अंदर वर्णों की सूची में से किसी एक से मेल खाता है।
  • \t टैब है
  • \n न्यूलाइन है
  • ...\+ इसका अर्थ है पूर्ववर्ती के एक या अधिक मिलान।

नियमित अभिव्यक्तियों के बारे में अधिक जानकारी के लिए, आप vim पूछ सकते हैं:

:help regexp
:help usr_27

1

मैं [ \t\n]*रिक्त स्थान के बजाय व्यक्तिगत रूप से उपयोग करूंगा । यह शून्य या अधिक '', टैब और न्यूलाइन पर मेल खाएगा। इस तरह से यदि आपके खोज पैटर्न का एक उदाहरण एक पंक्ति विराम देता है, लेकिन दूसरा नहीं, दोनों का मिलान किया जाएगा।

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