2014-05-17 14 views
9

में regex समूह के सभी मैचों झटका मुझे पता है कि मैं इस तरह रजिस्टर एक में मेल खाने वाले सभी लाइनों झटका कर सकते हैं:vim रजिस्टर

:g/regex/y/A 

लेकिन मैं यह पता लगाने की में मैच regex समूहों झटका करने के लिए कैसे नहीं कर पा रहे रजिस्टर ए:

:g/\(regex\)/\1y A 
(E10: \ should be followed by /, ? or &) 

उत्तर

11

आप इसे एक विकल्प कमांड के साथ कर सकते हैं।

:%s/regex/\=setreg('A', submatch(0))/n 

यह रेगेक्स से मेल खाने के लिए रजिस्टर को जोड़ देगा। n ध्वज एक सैंडबॉक्स में कमांड चलाएगा, इसलिए वास्तव में कुछ भी नहीं बदला जाएगा लेकिन कथन के दुष्प्रभाव होंगे।

आप शायद

:let @a='' 
+1

'setreg में बड़े अक्षर रजिस्टर का उपयोग नहीं कर सकते हैं ('ए', submatch (0))' आसान हो? –

+0

@ पीटररकर हाँ हाँ यह होगा। मुझे एहसास नहीं हुआ कि यह पूंजी पत्र स्वीकार करेगा (मैंने इसका परीक्षण भी नहीं किया ...) – FDinoff

+4

पूंजी पत्र संस्करण का उपयोग करने के बारे में अच्छा हिस्सा यह है कि आप लाइन सेट करने के लिए 'setreg()' के तीसरे पैरामीटर का उपयोग कर सकते हैं तुम्हें चाहिए। '% s/foo/\ = setreg ('ए', सबमिच (0), 'वी')/n' –

0

के साथ पहली बार रजिस्टर खाली करने के लिए आप सिर्फ हड़पने के लिए मैच का एक हिस्सा है, तो आप \zs और \ze के साथ काम कर सकते हैं चाहता हूँ। आपको केवल कई हिस्सों, या पुनर्गठन के लिए समूह को कैप्चर करने की आवश्यकता है।

मेरे ExtractMatches plugin (दूसरों के बीच) प्रदान करता है एक सुविधाजनक :YankMatches आदेश भी प्रतिस्थापन का समर्थन करता है:

:[range]YankMatches[!] /{pattern}/{replacement}/[x] 
0

तुम भी उठाई रजिस्टर करने के लिए दो सत्रों के बीच सभी मिलान लाइन झटका कर सकते हैं।

उदाहरण के द्वारा:

:11,21s/regex/\=setreg('A', submatch(0))/n 

मैचों लाइन 11 से regrex समूह 21 पूरी फ़ाइल के बजाय लाइन।

:/^ab/,/^cd/s/regex/\=setreg('A', submatch(0))/n 

से मेल खाता है लाइन है कि ab साथ stards cd साथ लाइन से regrex समूह।

सत्र के बारे में अधिक: http://vimregex.com/