विम रेगेक्स कैप्चर ग्रुप्स [बाऊ -> बायऊ: सीयू -> सेयु]


132

मेरे पास शब्दों की एक सूची है:

bau
ceu
diu
fou
gau

मैं उस सूची को चालू करना चाहता हूं:

byau
cyeu
dyiu
fyou
gyau

मैंने असफल रूप से कमांड की कोशिश की:

:%s/(\w)(\w\w)/\1y\2/g

यह देखते हुए कि यह काम नहीं करता है, मुझे रेमीक्स कैप्चर समूहों को विम में काम करने के लिए क्या बदलना होगा?



4
यह एक छोटा सा विषय है, इसलिए मैंने इसे एक टिप्पणी के रूप में यहाँ रखा है ... लेकिन मैं करूँगा :%norm ay<CR>
रोमेनिल

2
आपके मामले में (यदि यह बिल्कुल वर्णित जैसा है), तो इसके साथ एक विकल्प है: 2 कॉलम पर जाएं l, साथ में विजुअल ब्लॉक मोड दर्ज करें, इसके बाद Ctrl+vपूरे कॉलम को चिह्नित करें और फिर 'वाई' के साथ इंसर्ट मोड डालें । डालने मोड से बाहर निकलने के लिए परिष्करण सहित 7 कीस्ट्रोक्स । उत्तर के रूप में पोस्टिंग नहीं है क्योंकि यह वास्तव में कैप्चर समूहों के बारे में नहीं है (जो कि मैंने इसे ढूंढने के दौरान खोजा था)। :-)Shift+glShift+iEsc
एलएएफके का कहना है कि मोनिका

जवाबों:


224

इसे ठीक करने का एक तरीका यह सुनिश्चित करना है कि पैटर्न बच गए कोष्ठकों द्वारा संलग्न है :

:%s/\(\w\)\(\w\w\)/\1y\2/g

थोड़ा कम (और अधिक जादू -al) का उपयोग करने के लिए है \v, जिसका अर्थ है कि यह बाद पैटर्न में सभी ASCII वर्ण को छोड़कर '0'-'9', 'a'-'z', 'A'-'Z'और '_'एक विशेष अर्थ नहीं होता:

:%s/\v(\w)(\w\w)/\1y\2/g

देख:


41

यदि आप बैकस्लैश के साथ कैप्चरिंग समूहों से बचना नहीं चाहते हैं (यह वही है जो आप चूक गए हैं), \vविम के नियमित अभिव्यक्ति इंजन को बहुत ही जादुई मोड में बदलने का इरादा करें:

:%s/\v(\w)(\w\w)/\1y\2/g

इंगो, गलत जगह एक प्रश्न रखने के लिए खेद है: यह काम करता है :exmode; वहाँ यह gvim / संवाद बॉक्स को बदलने का एक तरीका है?
JJoao

3
@ जोजाओ: नहीं, खोज / प्रतिस्थापित बॉक्स केवल शाब्दिक खोज और प्रतिस्थापन के लिए है। आपको वैसे भी इसका उपयोग नहीं करना चाहिए; यह सिर्फ नोटपैड उपयोगकर्ताओं के लिए प्रशिक्षण पहियों है।
इंगो करकट

इंगो, धन्यवाद (यह मेरे लिए नहीं है: मैं एक्समोड से खुश हूं, लेकिन एक शब्दकोश परियोजना में भाषाविदों के लिए सहयोगी): यह लगभग काम करता है - \v...रेगेक्स वर्क के साथ ; प्रतिस्थापन स्ट्रिंग में, &काम करता है , लेकिन \ संरक्षित किया जाता है ( \1\rखो जाता है)
JJoao

@ जोजो: हाँ, यह वही है जो मुझे इसके साथ खेलते समय पता चला। मुझे अभी भी संदेह है कि क्या एक्स मोड के बिना विम का उपयोग करना एक अच्छा विचार है, लेकिन आप आसानी से अपने स्वयं के खोज-और-संवाद (आंतरिक रूप से संचालित :s) के माध्यम से inputdialog()और विम्सस्क्रिप्ट के एक बिट का निर्माण कर सकते हैं।
इंगो करकट

इंगो: फिर से धन्यवाद; मैं आपके संशयवादी मत से सहमत हूँ। Inputdialg +: s + vimscript शायद वह तरीका है जिससे gvim की खोज प्रतिस्थापित होती है। मेरे लिए \1 \r उपचार एक गंभीर बग है। मैं इसे कुछ विम विशिष्ट सूची में पोस्ट करने की कोशिश करूंगा। इस बीच मैं अपने एक विम्सस्क्रिप्ट-इनपुटडियोगॉग की कोशिश करूंगा।
जजोओ

34

आप इस पैटर्न का उपयोग कर सकते हैं जो छोटा है:

:%s/^./&y
  • %s पूरी फ़ाइल में पैटर्न लागू होता है।
  • ^. रेखा के पहले चरित्र से मेल खाता है।
  • &yyपैटर्न के बाद जोड़ता है ।

13

आपको समूहीकरण परिकल्पना से बचना होगा:

:%s/\(\w\)\(\w\w\)/\1y\2/g

वह चालबाजी करता है।

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