क्या मैं vim कमांड लाइन में perl रेगुलर एक्सप्रेशन का उपयोग कर सकता हूँ?


27

मैं vim कमांड लाइन पर perl रेगुलर एक्सप्रेशन का उपयोग करना चाहता हूं। उदाहरण के लिए, वर्तमान लाइन पर शब्दों को कैपिटल करने के लिए, आप टाइप कर सकते हैं:

:s/(\w+)/\u$1/g

From : perl- pattern की मदद करें ... Vim की रेग्लेक्स पर्ल के समान हैं, जो आप कर सकते हैं। उनके बीच का अंतर ज्यादातर सिर्फ उहाम है ... यह कहना कि चीनी ग्रीक के समान है, आप क्या संवाद कर सकते हैं। अंतर ज्यादातर सिर्फ नोटेशन का है। regex संकेतन के अलावा कुछ नहीं है! यदि एक संकेतन दूसरे की तुलना में कम परिचित है, तो मतभेद कष्टप्रद हैं। यही कारण है कि लोग पहली जगह में पर्ल के बारे में पूछते हैं!
dreftymac

जवाबों:


19

आप किसी बाहरी कमांड के जरिए किसी भी लाइन या रेंज की लाइन को फिल्टर कर सकते हैं। जैसे, आप कर सकते हैं:

:.!perl -pe "s/(\w+)/\u\1/g"

जो उस पर्ल कमांड के जरिए करंट लाइन को फिल्टर करेगा। (यहां :कमांड लाइन मोड में जाने के लिए, और .जो वर्तमान लाइन का मतलब है; आप एक लाइन रेंज या %संपूर्ण लाइन के लिए भी निर्दिष्ट कर सकते हैं , आदि)

यदि आप प्रतिस्थापन के पैटर्न में निर्मित विम का उपयोग करना चाहते हैं, तो आप जो निकटतम आएंगे वह विम के "बहुत ही जादुई" विकल्प, \ v का उपयोग करना है, जैसे:

:s/\v(\w+)/\u\1/g

देखें :help patternऔर :help substituteअधिक जानकारी के लिए। मुझे नहीं लगता कि "बहुत जादू" पर्ल के पैटर्न के समान है, लेकिन बहुत करीब है। वैसे भी, आप हमेशा पर्ल का उपयोग कर सकते हैं यदि आप इसके साथ अधिक सहज हों, जैसा कि ऊपर।


1
बहुत जादू के साथ, आपको यह याद रखने की ज़रूरत नहीं है कि (विशेष रूप से व्यवहार किया जाता {है: "0 '-' 9 ',' ए '-' जेड ',' ए '-' जेड 'और को छोड़कर सभी एएससीआईआई अक्षर '_' का एक विशेष अर्थ है। " धन्यवाद!
अरिअट

10

नहीं, आप उस तरीके से पर्ल रेगुलर एक्सप्रेशन का उपयोग नहीं कर सकते। पर्ल नियमित अभिव्यक्ति घटकों के लिए विम समकक्ष सीखने में मदद के लिए, देखें

:help perl-patterns

हालाँकि, आप पर्ल को बाहरी फ़िल्टर के रूप में उपयोग कर सकते हैं, जैसा कि frabjous द्वारा समझाया गया है। यदि आप अपने Vim को +perlफीचर के साथ संकलित कर रहे हैं, तो आप पर्ल इंटरफ़ेस का उपयोग करके विम के भीतर पर्ल कमांड को निष्पादित कर सकते हैं । देख

:help if_perl.txt

2
+1, :help perl-patternsने उस एक चीज़ को हल कर दिया है जिसे मैं पहले विम के बारे में नफरत करता था
मार्क के कोवान

8

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

/\v"your regex"

के बजाय:

/"your regex"

यह वह उत्तर है जिसकी मुझे तलाश थी!
एलेक्टरसेक

आप अपने nnoremap / /\vऔर vnoremap / /\v.vimrc को जोड़कर स्वयं की सहायता भी कर सकते हैं ताकि जब आप /इसे टाइप करें तो यह केवल काम करे।
मटमैक 3


2

Eregex.vim प्लगइन का उपयोग करें । यह बहुत उपयोगी है और मुझे इससे कोई समस्या नहीं है।

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