2008-09-18 17 views
31

सुंदर मूल प्रश्न, मैं "abc " से शुरू होने वाले किसी भी वाक्यांश से सीधे "defg" के अलावा किसी भी वाक्यांश से मेल खाने के लिए विम में एक रेगेक्स लिखने की कोशिश कर रहा हूं।विम: मैं अपनी खोज से एक संपूर्ण शब्द कैसे निकालूं?

मैंने डी, ई, एफ या जी के अलावा किसी एकल चरित्र से मेल खाने के लिए "[^defg]" का उपयोग किया है।

मेरा पहला वृत्ति /abc [^\(defg\)] या /abc [^\<defg\>] का प्रयास करना था, लेकिन इनमें से कोई भी काम नहीं करता था।

+0

क्या आपका मतलब पूर्ववर्ती है? या उसके बाद? आपके उदाहरणों का पालन करना प्रतीत होता है। – rampion

उत्तर

39

यहां खोज स्ट्रिंग है।

/abc \(defg\)\@! 

जिस अवधारणा को आप ढूंढ रहे हैं उसे नकारात्मक दिखने वाला दावा कहा जाता है। अधिक जानकारी के लिए इसे vim में आज़माएं:

:help \@! 
+0

रिकॉर्ड के लिए, मैं एक emacs उपयोगकर्ता हूँ :-) – bmdhacks

+1

+1 मुझे यह प्रश्न थोड़ी देर के लिए मिला है। अगर मैं डर नहीं था तो मैं आपकी टिप्पणी को स्पैम के रूप में चिह्नित करूंगा, यह आपके प्रतिनिधि को चोट पहुंचाएगा। – xdhmoore

0

ये हम चले, यह एक बालों वाले एक है:

/\%(\%(.\{-}\)\@<=XXXXXX\zs\)* 

(खोज शब्द के साथ XXXXXX बदलें)। यह में XXXXXX वाली सभी चीज़ों की खोज करेगा। मुझे कल्पना है कि आपने किया:

/abc \%(\%(.\{-}\)\@<=defg\zs\)* 

यह ऐसा काम कर सकता है जैसा आप चाहते हैं। आशा है इससे थोडी मदद मिलेगी!

-4

/abc \ [^ घ] [^ ए] [^ f] [^ जी]

यह बड़ा शब्द के लिए बहुत बोझिल है, लेकिन एक आकर्षण की तरह काम करता है।

+1

क्या यह "abc daaa" से मेल नहीं खाएगा? –

14

आगे बढ़कर या उसके बाद?

यदि यह 'एबीसी' से शुरू हो रहा है जो कि (तुरंत) 'defg' के बाद नहीं है, तो आप bmdhacks' solution चाहते हैं।

यह एबीसी 'कि (तुरंत)' defg 'द्वारा preceeded, तो आप एक नकारात्मक lookbehind चाहते नहीं है के साथ शुरू कुछ भी बताया गया है:

/\%(defg\)\@<!abc/

इस रूप में यह नहीं है जब तक' एबीसी 'के किसी भी घटना से मेल खाएगी 'defgabc' का हिस्सा। अधिक जानकारी के लिए :help \@<! देखें।

आप जब तक इसका हिस्सा नहीं है के रूप में 'एबीसी' को चाहते हैं, तो सिर्फ एक .* जोड़ें 'defg * एबीसी।':

/\%(defg.*\)\@<!abc/

मिलान केवल तर्ज पर 'एबीसी' जहां 'defg' नहीं होती है इसी तरह की है:

/\%(defg.*\)\@<!abc \%(.*defg\)\@!/ 

हालांकि, अगर आप सिर्फ खिलाड़ी को बदलने के इस कार्य कर रहे हैं, तो आप इस आसान :v// और :s//

के संयोजन से बना सकते हैं

यह 'डीईजीजी' नहीं होने वाली सभी पंक्तियों पर 'एबीसी' के लिए '< जो भी>' विकल्प देगा। अधिक के लिए :help :v देखें।

संबंधित मुद्दे