आंतरिक पाठ को येंक्ड पाठ से कैसे बदलें


17

एक संपादन पैटर्न जो मैं अक्सर चलाता हूं वह निम्नलिखित है: मैं उद्धरण या कोष्ठक के अंदर पाठ का एक टुकड़ा देना चाहता हूं, और पाठ के उस टुकड़े को उद्धरण / कोष्ठक के दूसरे जोड़े के अंदर प्रतिस्थापित करना चाहता हूं।

उदाहरण के लिए, यदि मैं कक्षा का नाम कॉपी करना चाहता हूं foo barऔर कहीं और पेस्ट करना चाहता हूं :

<span class="foo bar">

<div class="this-should-be-replaced-with-foo-and-bar">

मुझे पता है कि यह क्या है: यदि मैं स्पैन की कक्षा के अंदर जाता हूं, तो मैं yi"उद्धरण के अंदर पाठ को यैंक करने के लिए उपयोग करता हूं ।

अब मेरे पास मेरे रजिस्टर में यह है, इसलिए मुझे इसके साथ div की वर्ग सामग्री को बदलने में सक्षम होना चाहिए। लेकिन मुझे यह करने का एक आसान तरीका नहीं मिल रहा है।

यदि मैं इसका उपयोग करता ciwहूं, तो सामग्री के साथ मेरे रजिस्टर को ओवरराइट करने के लिए, इसलिए मैंने अपने यॉन्क्ड पाठ को ढीला कर दिया।

सबसे अच्छी बात जो मैं कर सकता हूं, वह डिव की कक्षा के पहले उद्धरण के लिए बढ़ रही है, मार रहा है p, फिर अगले उद्धरण को हटा रहा है dt"

आमतौर पर मैं अपनी स्थिति को खराब कर देता हूं, और मैं इसे दो तारों को मिलाने वाले उद्धरण के अंदर कहीं चिपका देता हूं, और यह चीजों को गड़बड़ कर रहा है।

मैं उम्मीद कर रहा हूँ कि इस आसान को बनाने के लिए "मेरी सामग्री के साथ आंतरिक पाठ की जगह कृपया" संयोजन को करने का कोई तरीका है।

जवाबों:


19

vi"pजब आप अंदर उपयोग कर सकते हैं ""। यह टेक्स्ट को यैंक रजिस्टर में बदल सकता है, इसलिए यह तब मायने रखता है जब आप एक से अधिक बार मूल यान् यक टेक्स्ट का उपयोग करना चाहते हैं।

संपादित करें : Octaviour की अतिरिक्त जानकारी इसे एक से अधिक बार पुन: प्रयोज्य बनाने के बारे में टिप्पणी करती है:

ऐसा करने के लिए, मैं नामांकित रजिस्टर पर जाऊंगा, जो दो कमांड बनाता है: "ayi"और vi""apयदि आप रजिस्टर का उपयोग करते हैं a


2
मैं इस समाधान के बारे में विस्तार से बताऊंगा। आप पहले उस टेक्स्ट को यैंक करें जिसे आप कॉपी करना चाहते हैं। फिर आप उस स्थान पर जाएं जहां आप पेस्ट करना चाहते हैं, नेत्रहीन vi का उपयोग करके चयन करें "। एक पेस्ट कमांड अब एक साथ अनाम रजिस्टर की सामग्री को कर्सर पर डाल देगा और चयनित पाठ को हटा देगा। इसलिए vi" p पूरी तरह से वही करता है जो आप चाहते हैं, लेकिन यह आपको एक ही पाठ को दो बार चिपकाने से रोकते हुए, अनाम रजिस्टर की सामग्री को प्रतिस्थापित करता है। ऐसा करने के लिए, मैं एक नामित रजिस्टर पर जाऊंगा, जो दो कमांड बनाता है: "ayi" और vi "" एप यदि आप रजिस्टर का उपयोग करते हैं तो।
10

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

11

आप गिने हुए रजिस्टर का उपयोग कर सकते हैं। पहले यान "फू-बार" के साथ yi", जो "0रजिस्टर को भरेगा , देखें :h "0। फिर ci"<c-r>0रजिस्टर 0 की सामग्री के साथ बदलने के लिए।

:h i_CTRL-Rपिछले भाग के विवरण के लिए देखें ।


2
क्यों न केवल इसे अनाम रजिस्टर ( yi") में जमा किया जाए और इसे उस रजिस्टर से चिपका दिया जाए 0जहां इसे बदलने के बाद पाठ हटा दिया गया है ( ci"<c-r>0)? Vimgolf के कार्यकाल में आप 2 कीस्ट्रोक्स जीतते हैं और आप अपने रजिस्टरों के साथ खिलवाड़ नहीं करते हैं।
statox

जैसे ही मैंने एक 'मैं' को संपादन मोड में समाप्त किया, हालांकि, यह एक रजिस्टर की नकल नहीं करता है
jurgenb

@ n3wjack यह शायद इसलिए है क्योंकि आपने CTRL+rपहले नहीं दबाया a, <c-r>इसका मतलब है।
statox

1
@ KarlYngveLervåg वास्तव ciwमें हटाए गए पाठ को अनाम रजिस्टर में डालते हैं, लेकिन रजिस्टरों को स्थानांतरित कर दिया जाता है, इसलिए आपको <c-r>0इसके बजाय उपयोग करना होगा <c-r>"। देख लो :h quote_number
statox

1
मुझे लगता है, अधिक विशेष रूप से, कि यहां बिंदु अनाम रजिस्टर के बारे में नहीं है, बल्कि गिने हुए रजिस्टर के बारे में है। "0रजिस्टर केवल झटका आदेश से भर जाता है और जैसे द्वारा परेशान नहीं किया जाएगा c
कार्ल यंगवे लर्वग

9

यहाँ एक और उपाय है। यह विमगॉल्फ के कार्यकाल में सबसे अच्छा नहीं है, लेकिन यह ब्लैक होल रजिस्टर का उपयोग करता है:

एक बार जब आप foo barस्ट्रिंग पर होते हैं तो आप इसे सामान्य रूप से उपयोग कर सकते हैं yi"

फिर कोष्ठक के अंदर बदलने के लिए: "_di"P

जो है:

"_       We will use the black hole register
di"      Delete the inner brackets and put the deleted text in the black hole register
P        Put the previously yanked text

ब्लैक होल रजिस्टर का लाभ यह है कि यह आपके अन्य रजिस्टरों को गड़बड़ नहीं करेगा। :h quote_अधिक जानकारी के लिए देखें।

(ध्यान दें कि यह उत्तर केवल ब्लैक आउट रजिस्टर के बारे में बात करने के लिए है। मैं व्यक्तिगत रूप से @grodzik द्वारा सुझाए गए दृश्य चयन का उपयोग करता हूं।)


मुझे लगता है कि आपको Pउस एक के लिए एक ऊपरी मामले की आवश्यकता है। जब आप di"अपने कर्सर को अंतिम उद्धरणों पर छोड़ pदेंगे और उसके बाद पेस्ट करेंगे, जहां Pवर्तमान स्थिति से पहले पेस्ट किया जाएगा।
जेकज़ो

@jecxjo यह सही है, मैंने अपना जवाब संपादित किया, धन्यवाद!
statox

8

मुझे इसकी इतनी बार आवश्यकता है, मैंने सरल बनाने और अधिकतम गति की अनुमति देने के लिए एक प्लगइन लिखा है: रिप्लेसविथग्रेस्टर

यह प्लगइन एक दो-इन-वन grकमांड प्रदान करता है जो एक {प्रस्ताव} / टेक्स्ट ऑब्जेक्ट, पूरी लाइन (एस) या एक रजिस्टर की सामग्री के साथ वर्तमान चयन द्वारा कवर पाठ की जगह लेता है; पुराने पाठ को ब्लैक-होल रजिस्टर में हटा दिया गया है, अर्थात यह चला गया है। यह पारदर्शी रूप से कई कोने के मामलों को संभालता है और मानक .कमांड के माध्यम से त्वरित दोहराने की अनुमति देता है । क्या आपको यह पसंद नहीं आना चाहिए, इसके पृष्ठ में विकल्पों के लिंक हैं।


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