विम में सभी (नहीं) मिलान लाइनों को छिपाएं


87

क्या vi या Vim में सभी मिलान लाइनों को दिखाना / छिपाना संभव है? हाइलाइट न करें बल्कि केवल उन लाइनों को दिखाएं।

उदाहरण के लिए मेरे पास शब्द के साथ एक पाठ है ERROR। मैं कैसे बनाऊं यह केवल लाइनों ERRORको दिखाएगा और केवल बिना लाइनों को कैसे दिखाएगा ERROR?

क्या सभी मिलान लाइनों को हटाने के बिना एक समाधान है और फिर इसे पूर्ववत करना है?


जवाबों:


107

क्या आप :globalकमांड के बारे में जानते हैं ? क्या यह वही है जो आप चाहते हैं?

:g/ERROR

और इसके विपरीत:

:g!/Error

या समकक्ष:

:v/Error

19
यह बहुत अच्छा नहीं है। एक बार जब आप नीचे की ओर स्क्रॉल करते हैं, तो कमांड खत्म हो जाती है और सब कुछ फिर से दिखाई देता है। यह वास्तव में उन सामग्रियों को छिपा नहीं रहा है।
कान ली

@KanLi g<फिर से देखने के लिए हिट , या @:यदि आप रन और कमांड को रोकते हैं ।
डी। बेन नोबल

53

आपके उपयोग के मामले के आधार पर एक और दृष्टिकोण vimgrep और इसके परिणामों का उपयोग उपसर्ग में किया जाएगा । आप निम्न कार्य कर सकते हैं:

:vimgrep pattern %वर्तमान फ़ाइल को खोजेगा और आपको पहले खोज परिणाम पर ले जाएगा। इससे भी महत्वपूर्ण बात यह है कि यह परिणाम "क्विकफिक्स लिस्ट" में रखता है।

:copenइसके बाद क्विकफिक्स लिस्ट को एक अलग क्विकफिक्स-विंडो में खोलेगा। तो आपके पास अपने पिछले vimgrep से सभी लाइनों के साथ एक अलग विंडो होगी। क्विकफिक्स-विंडो के अंदर आप अपनी मूल फ़ाइल में संबंधित लाइन पर कूदने के लिए एक लाइन पर एंटर या डबल-क्लिक कर सकते हैं।

:colderआपको पुरानी त्वरित उप-सूचियों (पुराने vimgrep परिणाम) पर वापस जाने देगा। और :cnewerनए खोज परिणामों के लिए आगे बढ़ता है।

ध्यान दें कि रनिंग के दौरान क्विकफ़िक्स सूची को भी अपडेट किया :makeजाता है (यही कारण है कि इसकी फिक्सिंग के लिए क्विकफ़िक्स कहा जाता है)। इस वजह से "स्थान सूची" नामक क्विकफ़िक्स सूची में भी परिवर्तन होता है। इसका इस्तेमाल करने के बजाय आप का उपयोग :lvimgrep, तो सी उपसर्ग के आदेशों से एल-उपसर्ग के आदेशों का उपयोग नहीं बल्कि - :lopen, :lolder, :lnewer

बेशक, बहुत कुछ आप कर सकते हैं। :help quickfixअधिक जानकारी के लिए देखें ।

पुनश्च, आपने कहा था कि आप ऐसा दृष्टिकोण नहीं चाहते हैं जो लाइनों को हटा दे और फिर उन्हें पूर्ववत कर दे। लेकिन जब से आपने g/ERRORउत्तर के रूप में चिह्नित किया था मुझे लगा कि मैं एक त्वरित और गंदा तरीका बताऊंगा g!/ERROR/d। फिर आप आसानी से इसे पूर्ववत कर सकते हैं u। इसके अलावा FYI करें, आप कमांड से :set hlsearchमिलान किए गए पैटर्न को हाइलाइट करने के लिए कर सकते हैं :g


1
टिप पर ": g! / ERROR / d" के लिए धन्यवाद स्वीकार किए गए उत्तर से बेहतर है।
विनगरिया

क्या आप पैटर्न से मेल खाते लाइनों के साथ ऐसा नहीं कर सकते हैं ?
१२:४६ पर जैकट

37

आप उपयोग कर सकते हैं

:g/ERROR/

ERROR के साथ सभी लाइनों को प्रिंट करने के लिए

इसके अलावा एक विम प्लगइन है जिसे मैंने कई बार देखा लेकिन उपयोग नहीं किया: सिलवटों: दूर लाइनों को मोड़ो जो किसी दिए गए पैटर्न से मेल नहीं खाते


15
Foldsearch प्लगइन के लिंक के लिए +1। यह विनीत है और काम में आ सकता है।
user55400

26

ऐसा करने का सबसे अच्छा तरीका है->

:vimgrep /something/g % | copen

यह आपके कीवर्ड के लिए मैचों की सूची खोलेगा और क्विकफिक्स विंडो में केवल मिलान की गई लाइनें भी दिखाएगा।

यदि वर्तमान फ़ाइल पर विचार नहीं कर रहा है तो फ़ाइल को पथ के साथ% बदलें।


1
यदि आप वर्तमान फ़ाइल पर विचार नहीं कर रहे हैं, तो फ़ाइल पथ के साथ% बदलें।
शिवेंद्र

क्या आप पैटर्न से मेल खाते लाइनों के साथ ऐसा नहीं कर सकते हैं ?
१२:४६ पर जैकट

1

:vimgrep /something/g % | copenकमाल का काम करता है। इसके अलावा :g/<pattern>/dपैटर्न के साथ नष्ट लाइनों के लिए इस्तेमाल किया जा सकता


यह इस सवाल पर एक और जवाब है।
शिवेंद्र

1

मामले में आप का उपयोग करने के लिए fzfहो सकता है:

  • :Lines सभी खुली फाइलों में
  • :BLines केवल खुले बफर में
  • :Rg [pattern] का उपयोग करते हुए ripgrep


0

आप शायद कम vi vim और / pattern / में कमांड का मतलब है, जिसमें लाइनें / पैटर्न / (जैसे grep) हैं।

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