उदाहरण :%y+
बाहरी + क्लिपबोर्ड पर yanks। अब मुझे ^\S\+
जैसे बाहरी + क्लिपबोर्ड पर रेगेक्स द्वारा परिणाम चाहिए। कैसे?विम: यंक रेगेक्स मैच + क्लिपबोर्ड
ट्रायल 1. [विफल]:[email protected]^\S\[email protected]+
ट्रायल 2. [विफल]:^\S\+y+
उदाहरण :%y+
बाहरी + क्लिपबोर्ड पर yanks। अब मुझे ^\S\+
जैसे बाहरी + क्लिपबोर्ड पर रेगेक्स द्वारा परिणाम चाहिए। कैसे?विम: यंक रेगेक्स मैच + क्लिपबोर्ड
ट्रायल 1. [विफल]:[email protected]^\S\[email protected]+
ट्रायल 2. [विफल]:^\S\+y+
यहाँ http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard, खंड 'खोज हिट युक्त लाइनों प्रतिलिपि बनाई जा रही' एक नज़र डालें।
यह मेरे लिए काम किया (स्पष्ट रजिस्टर a
, इसे में झटका pattern
परिणाम, क्लिपबोर्ड में पर कॉपी):
qaq
:g/pattern/y A
:let @+ = @a
जब मैं :g/pattern/y+
की कोशिश की है कि यह केवल पहली पंक्ति की नकल की।
लिंक पर वह अनुभाग भी एक फ़ंक्शन देता है जिसे आप सभी पंक्तियों की प्रतिलिपि बनाने के लिए लिख सकते हैं, लेकिन यह अभी भी 2-चरणीय प्रक्रिया की तरह दिखता है (/pattern
करें और फिर फ़ंक्शन को कॉल करें): लेकिन आप शायद अपना स्वयं का मैक्रो/अनुक्रम में दोनों करने के लिए शॉर्टकट।
निम्नलिखित का प्रयास करें। सबसे पहले अपनी मिलान किए गए regexps को एक सूची (: सहायता सूची) में सहेजने के लिए फ़ंक्शन को परिभाषित करें।
:fun Add(list, item)
: call add(a:list, a:item)
: return a:item
:endfun
ध्यान दें कि यह अतिरिक्त आइटम भी लौटाता है। यह आवश्यक नहीं है, लेकिन आप यहां जो भी लौटते हैं वह में प्रतिस्थापन टेक्स्ट बन जाता है: विकल्प जो नीचे आता है।
अगला, एक खाली सूची बनाएं।
:let list=[]
फिर अपना regexp चलाएं।
:%s/^\S\+/\=Add(list, submatch(0))/
ध्यान दें कि प्रतिस्थापन के साथ \ = शुरू होता है (देखें: मदद उप की जगह-विशेष)। नतीजा यह है कि हम मिलान अभिव्यक्ति को स्वयं के साथ प्रतिस्थापित करते हैं, लेकिन साथ ही परिणाम में परिणाम को कैप्चर करते हैं।
सबमिशन() फ़ंक्शन मिलान के हिस्सों को वापस करता है: विकल्प कमांड। सबमिच (0) पूरे मैच को लौटाता है।
ध्यान दें कि एक दुष्प्रभाव के रूप में बफर को बदलने के रूप में चिह्नित किया गया है। यदि आपने प्रतिस्थापन निष्पादित करने से पहले बफर को सहेजा है तो आप इसे पूर्ववत करने के लिए बस मारकर या 'संलग्न करने के द्वारा इसे ठीक कर सकते हैं। आप ' कमांड पर। (आप कार्रवाई को वापस ला करने जा रहे हैं तो यह कोई प्रभाव नहीं पड़ेगा कि हम क्या हमारे समारोह जोड़ें से लौटने।)
आप
:echo list
के साथ अपने मैचों को देख सकते हैं या आप अपने बफर करने के लिए उन्हें जोड़ सकते हैं
:$put=list
मुझे उम्मीद है कि इससे मदद मिलती है।एक बार जब आप जानते हैं कि यह सीधा है, लेकिन वहां पचाने के लिए काफी कुछ है।
ओह, मैं लगभग भूल गया! आप अपने मैचों को क्लिपबोर्ड पर
:let @+ = join(list, '^@')
फिर आपके मैचों क्लिपबोर्ड में होंगे, प्रत्येक एक अलग लाइन पर होंगे।
^@ एक NUL चरित्र का प्रतिनिधित्व करता है, और < सी वी > < सी जे > साथ उत्पन्न होता है, जिसका अर्थ है प्रेस नियंत्रण V, नियंत्रण-जे के बाद। (क्यों आप उपयोग करना^@ यहाँ अपने आप में एक पूरे विषय है।)
अच्छा जवाब। मुझे लगता है कि आप सीधे @ + में जोड़कर सूची के बिना कर सकते हैं। मुझे संदेह है कि आपका जवाब सामान्य मामले में बेहतर प्रदर्शन करेगा, हालांकि – sehe
हां जो भी काम करेगा, धन्यवाद।ओपी इसे पसंद कर सकता है, हालांकि सूची में शब्दों को संग्रहीत करने से आपको विकल्प भी मिलते हैं। – 1983
आप क्लिपबोर्ड को बाद में सूची में भी स्टोर कर सकते हैं: 'सूची = =] // चलो सूची = विभाजन (@ +,' \ n ') ' – Reman
शायद आप निम्नलिखित में कुछ प्रेरणा पा सकते हैं:
:saveas %.tmp
एक प्रति पर काम शुरू करने के
:v//d
:exec '%s/^.\{-\}\(' . @/ . '\).*$/\1/g'
उदाहरण के लिए
तो निम्न पाठ पर एक खोज /word\d
कर:
एंड्रॉयड। Proin sagittis2। Curabitur ऑक्टर मेटस गैर मॉरीस। Nunc condimentum nisl non augue। डोनेक लियो urna, dignissim vitae, porttitor ut, iaculis amet, sem।
कक्षा aptent taciti sociosqu3 विज्ञापन litora torquent प्रति conubia नोस्ट्रा, प्रति inceptos himenaeos। Suspendisse potenti। Quisque augue metus, hendrerit sit amet, कमोडो vel, scelerisque ut, ante। प्रेजेंट यूसुस्मोड यूसुस्मोड रिसास। मॉरीस मेट्स मीस सेल्स कमोडो के लिए मेट्रस बैठे हैं। मोरबी congue मॉरीस एसी sapien congue। डोनेक जस्टो। सेड congue nunc vel mauris0। Pellentesque वाहन ऑर्सी आईडी मुक्त। एचएसी habitasse platea dictumst में। Nulla sollicitudin, purus1 id elementum dictum, dolor augue hendrerit ante, vel semper metus enim et dolor। Pellentesque molestie9।
दिखाए गए शब्दों को हाइलाइट करेगा। reg X
(अपरकेस) न्यू लाइन से अलग
sagittis2
sociosqu3
mauris0
purus1
molestie9
ओपी को ध्यान में रखना चाहिए कि आपको प्रति पंक्ति केवल एक मैच मिलना चाहिए इस। यदि आप प्रति पंक्ति एकाधिक मिलान चाहते हैं तो ':% s/MYREGEXP/\ r & \ r/g | v // d'। – 1983
संलग्न सभी खोज परिणाम: कर निम्नलिखित बफर में
:v//d|exec '%s/^.\{-\}\(' . @/ . '\).*$/\1/g'
परिणाम
:g/^/call setreg('X', matchstr(getline('.'), '^\S\+') . "\n")
reg x
स्पष्ट करने के लिए:
qxq
यह प्रत्यक्ष उत्तर प्रतिलिपि पूरी लाइनें जहां regex निहित है। लेकिन ऊपर दिए गए लिंक में, CopyMatches नामक एक स्क्रिप्ट केवल मिलान किए गए हिस्सों की प्रतिलिपि बनाती है। – squid