मैं किसी शब्द की प्रत्येक घटना के लिए कीस्ट्रोक्स का एक सेट कैसे लागू करूं?


13

अगर मैं हर शब्द को हटाना चाहता हूं, तो यह आसान है, क्योंकि मैं ऐसा कुछ करूंगा:

:s%/WORD//g

लेकिन क्या होगा अगर मैं xyz"वॉर्ड" की हर घटना को करना चाहता हूं ? उदाहरण के लिए, मान लें कि मैं "WORD" वाली प्रत्येक पंक्ति को हटाना चाहता हूं। मैं ऐसा करने के लिए कुछ तरीके सोच सकता हूं, लेकिन उनमें से कोई भी आदर्श नहीं लगता है।

1)

/WORD

और तब ddnddnddnddn...तक मैन्युअल रूप से दबाएं जब तक कि अधिक घटनाएं न हों। लेकिन यह समय लेने वाली है अगर ऐसा करने के लिए कई लाइनें हैं।

2)

qd/WORD<enter>ddq

और फिर अनुमान करें कि कितनी बार WORD होता है, और फिर, उदाहरण के लिए:

500@d 

लेकिन यह या तो ए) लाइनों का एक गुच्छा याद रखेगा या बी) अतिरिक्त लाइनों के गुच्छा को हटा देगा।

क्या ऐसा करने के लिए इससे अच्छा तरीका है?


3
जैसा कि आप जानते हैं, 500@dवैसे ही आप वास्तव में सुरक्षित हैं। खोज शब्द नहीं मिलने पर मैक्रो प्लेबैक बंद हो जाएगा। तो आपको बस एक त्रुटि दिखाई देगी "पैटर्न नहीं मिला: शब्द" सभी लाइनों को हटाने के बाद।
वाइल्डकार्ड

@Wildcard थैंक्यू, जो वास्तव में जानना अच्छा है!
जेम्स

जवाबों:


17

आप इसके लिए कमांड :globalऔर :normalकमांड का उपयोग कर सकते हैं । :globalआदेश निम्न सिंटैक्स है:

:global/{pattern}/{command}

यह "पैटर्न" की हर घटना पर "कमांड" चलाएगा। फिर आप :normalकिसी शब्द के उपयोग की प्रत्येक घटना पर कीस्ट्रोक्स की एक श्रृंखला को चलाने के लिए कमांड का उपयोग कर सकते हैं :global। इस तरह:

:g/WORD/normal {keystrokes}

यदि उन कीस्ट्रोक्स में विशेष कुंजी शामिल हैं <Ctrl>, तो आप इसे इस :executeतरह से कमांड के साथ जोड़ सकते हैं :

:g/WORD/exe "normal {keystrokes}"

ध्यान दें कि आपको एक विशेष कुंजी की प्रत्येक घटना से पहले बैकस्लैश डालना होगा।

इन आदेशों पर अधिक जानकारी के लिए, देखें :help :normalऔर :help :global


मुझे इससे हराएं; मुझे लगता है कि मैं बहुत धीमा टाइप कर रहा था। :)
वाइल्डकार्ड

3

पूर्णता के लिए, आप उपयोग कर सकते हैं :substitute, यदि आप मेल खाते हैं - अपने उदाहरण में (पूरी लाइन को हटा दें जिसमें WORD है) - पूरी लाइन जिसमें WORD, उदा:

:%s/^.*\<WORD\>.*\n

इसका एक निहितार्थ है "कुछ भी नहीं के साथ मैच बदलें", यानी यह इसका छोटा रूप है:

:%s/^.*\<WORD\>.*\n//

के साथ संयुक्त \zs, \ze, \(- \)(समूह), और \=साथ (प्रतिस्थापन भाग में) submatch(), :substituteबहुत शक्तिशाली हो सकता है।


2

लगता है आप ढूंढ रहे हैं :global

:g/WORD/d_

अंडरस्कोर क्या करता है?
वाइल्डकार्ड

यह काम करता है, लेकिन मुझे पता है कि कोई भी आदेश काम नहीं करता है। मुझे "एडिटर कमांड नहीं" मिल रहा है।
जेम्स

1
@Wildcard: अंडरस्कोर बताता है कि क्या कटौती की जा रही है। निष्पादित कमांड वास्तव में है :deleteऔर सामान्य मोड ऑपरेशन नहीं है d
ल्यूक हरमिट

@DJMcMayhem: अन्य सामान्य कार्यों के लिए, आपको आवश्यकता होगी :normal। और अगर आप विशेष कुंजी की जरूरत है, तो आप भी आवश्यकता हो सकती है :exe-> `exe" सामान्य aFooFar \ <esc> "
ल्यूक Hermitte
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.