उन पंक्तियों की खोज करें जिनमें एक पैटर्न होता है लेकिन एक दूसरा पैटर्न नहीं होता है


15

मैं लाइनों जो कुछ शब्द शामिल लेकिन है के लिए खोज करने की जरूरत नहीं एक दूसरा शब्द होते हैं।

उदाहरण के लिए, उन पंक्तियों को खोजें जिनमें "यह" शब्द है लेकिन "लाल" शब्द नहीं है

ताकि इन पंक्तियों वाली फ़ाइल के लिए

This is a blue coat
This is a red  coat
This is a purple coat
That is a coat

खोज केवल पहली और तीसरी पंक्ति का पता लगाएगी।

किसी भी सलाह के लिए धन्यवाद!


आप LogiPat प्लगइन का उपयोग कर सकते हैं जो नए Vims
क्रिश्चियन Brabandt

जवाबों:


23

आप इस कमांड का उपयोग लाइनों को प्रिंट करने के लिए कर सकते हैं Thisऔर नहीं red:

:g/\(.*This\)\&\(.*red\)\@!
  • \&शाखाओं को एक तार्किक की तरह अलग करता है ANDक्योंकि हम उन पंक्तियों को चाहते हैं जो दो स्थितियों (शाखाओं) को संतुष्ट करती हैं,
  • \(.*This\)पहली शाखा है, यह बस हो सकता है Thisलेकिन यह इस तरह से अधिक सामान्य है,
  • \(.*red\)\@!दूसरी शाखा है, \@!जिसका अर्थ है "शून्य चौड़ाई मिलान यदि पूर्ववर्ती परमाणु मेल नहीं खाता", एक तार्किक की तरह NOT

दूसरे शब्दों में:

\(.*This\)  \&  \(.*red\)\@!
°°°°°°°°°°  °°  °°°°°°°°°°°°
'This'      AND NOT 'red'

बहुत धन्यवाद, यह स्वरूपित पाठ के माध्यम से एक प्रश्न की तरह है। मैं लापता डॉकस्ट्रिंग्स के कार्यों को खोजने के लिए इसका उपयोग करने में सक्षम था।
जोशुआ डेटेलर

1

इस पोस्ट पर एक नज़र डालें।

इसे @romainl उत्तर के साथ मिलाएं और आप जो चाहें कर सकते हैं।

उदाहरण: मान लीजिए कि मैं constउन कार्यों में शामिल करना चाहता हूं जो उनके पास नहीं हैं।

    handleChange = value => {

VIM स्क्रिप्ट:

%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc

आउटपुट:

    const handleChange = value => {

स्पष्टीकरण:

\([ ]*\)\(\w* = .*$\)

- मुझे सभी पंक्तियाँ प्राप्त हों word =

\&

- नियमों का संयोजन

^\(\&\(.*const.*\)\@!.\)*$

- लाइन में नहीं होना चाहिए const

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