विम में प्रत्येक पंक्ति के अंत में पाठ कैसे जोड़ें?


116

विम में, मेरे पास निम्नलिखित पाठ है:

key => value1
key => value2
key => value1111
key => value12
key => value1122222

मैं प्रत्येक पंक्ति के अंत में "," जोड़ना चाहूंगा। पिछला पाठ निम्नलिखित बन जाएगा:

key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,

क्या किसी को भी यह करना आता है? क्या इसे पूरा करने के लिए दृश्य ब्लॉक मोड का उपयोग करना संभव है?


इसी तरह का सवाल यहाँ
बजे

जवाबों:


163

यह फ़ाइल में प्रत्येक पंक्ति के लिए करेगा:

:%s/$/,/

यदि आप पूरी फ़ाइल के बजाय लाइनों का एक सबसेट करना चाहते हैं, तो आप उन्हें के स्थान पर निर्दिष्ट कर सकते हैं %

एक तरीका यह है कि विज़ुअल सेलेक्ट करें और फिर टाइप करें :। यह :'<,'>आपके लिए भर जाएगा , फिर आप इसे बाकी टाइप करेंगे (ध्यान दें कि आपको केवल जोड़ने की जरूरत है s/$/,/)

:'<,'>s/$/,/

4
अंतिम पंक्ति में एक अतिरिक्त है ', होना चाहिए :'<,'>s/$/,/
cjg

कोई आवश्यकता क्यों नहीं है g? ( :'<,'>s/$/,/g)
थोरबजर्न ईके क्रिस्टेंसन

@ ThorbjørnE.K.Christensen क्योंकि /$/वैसे भी एक बार ही मैच होता है।
बूबया

156

वास्तव में विजुअल ब्लॉक मोड का उपयोग करने का एक तरीका है। बस $Aविजुअल ब्लॉक मोड में प्रेस करने से चयन में सभी पंक्तियों का अंत हो जाता है। जैसे ही आप दबाएंगे सभी पाठों पर संलग्न पाठ दिखाई देगा Esc

तो यह एक संभव उपाय है:

vip<C-V>$A,<Esc>

यही है, सामान्य मोड में, दृश्य एक पैराग्राफ का चयन करें vip, दृश्य ब्लॉक मोड पर स्विच करें CTRLV, सभी लाइनों $Aको अल्पविराम में संलग्न करें ,, फिर Escपुष्टि करने के लिए दबाएं ।

प्रलेखन है :h v_b_A। उदाहरण अनुभाग में यह कैसे काम करता है, इसका भी चित्रण है :h v_b_A_example:।


1
नहीं, यह मानक Vim है: विजुअल ब्लॉक मोड (साथ C-V) में कुछ पंक्तियों का चयन करें और फिर कर्सर को लाइन के अंत में ले जाएँ $और उन सभी को जोड़ें A। आप प्यार करेंगे :h v_b_A, जो वास्तव में पूरी तरह से है।
ग्लट्स

1
ओह, मैं देख रहा हूं कि क्या चल रहा है! मैं आमतौर पर डालने मोड से बाहर निकलने के लिए <Esc> के बजाय Ctrl-C का उपयोग करता हूं, और जाहिरा तौर पर Ctrl-C के साथ यह काम नहीं करता है! कितना अजीब।
18on में वेरोनिका

3
के <C-V>ipस्थान पर उपयोग करके आप एक कीस्ट्रोक को बचा सकते हैं vip<C-V>
आरोन थोमा

1
@accolade, इस तरह से दृश्य ब्लॉक मोड में नहीं जाता है, और काम नहीं करेगा। <CV> अगर आप इसे इस तरह से करते हैं तो फिर से होने की जरूरत है।
कल्पनाथ

@imagineerThat, अजीब - यह मेरे लिए काम करता है - कुछ गैर-डिफ़ॉल्ट विकल्प के कारण होना चाहिए। (नहीं 'virtualedit'- मैंने इसका परीक्षण किया है।) मैं पुष्टि करता हूं कि यह एक साफ विम में काम नहीं करता है। नोट के लिए धन्यवाद!
हारून थोमा

44

एक और समाधान, एक और महान सुविधा का उपयोग कर:

:'<,'>norm A,

देखते हैं :help :normal


1
@, आपको यह टिप्पणी पसंद आएगी ।
रोमेल

1
@Swiss, आप कर सकते हैं भी तरह udioca बेनकाब है पर :normal। मुझे यह जानकारीपूर्ण लगा!
कॉनर

1
इस सब्रेडिट के बारे में पता नहीं था। धन्यवाद।
रोमेल

33

पूर्व मोड सबसे आसान है:

:%s/$/,

: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma

10

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

:'<,'>s/$/,/

और यह एक प्रतिस्थापन है जिसे आपके उदाहरण के लिए काम करना चाहिए, यह मानते हुए कि आप वास्तव में प्रत्येक पंक्ति के अंत में अल्पविराम चाहते हैं जैसा आपने उल्लेख किया है। यदि अनुगामी स्थान हैं, तो आपको इसके अनुसार कमांड को समायोजित करने की आवश्यकता हो सकती है:

:'<,'>s/\s*$/,/

यह प्रभावी रूप से अनुगामी व्हाट्सएप को हटाने के साथ लाइन के अंत से पहले व्हाट्सएप की किसी भी मात्रा को बदल देगा।

एक ही कमांड लाइनों की एक सीमा पर काम कर सकता है, उदाहरण के लिए अगले 5 लाइनों के लिए: :,+5s/$/,/या पूरे बफर के लिए :%s/$/,/:।


3

यदि आप 'की' से शुरू होने वाली लाइनों के अंत में ',' जोड़ना चाहते हैं, तो उपयोग करें:

:%s/key.*$/&,

या :g/key/s/$/,। देखते हैं :help :global
रोमेल

2

मेरे पास <M-DOWN>(पूरी तरह से नीचे तीर) मैप किया गया है <DOWN>.ताकि मैं बहुत जल्दी लाइनों की एक श्रृंखला पर अंतिम कमांड दोहरा सकता हूं। इस मानचित्रण के साथ मैं कर सकता हूं:

A,<ESC>

और फिर प्रत्येक पंक्ति के अंत में अल्पविराम को जोड़ने के लिए बार-बार दबाते हुए पूरी तरह से दबाए रखें।
यह मेरे लिए अच्छी तरह से काम करता है क्योंकि यह उन लाइनों पर बहुत अच्छा नियंत्रण करने की अनुमति देता है जो परिवर्तन नहीं करते हैं।
(मैं भी अन्य तीर आसानी से दोहराने के लिए अनुमति देने के लिए मैप किया गया है .)

यहाँ आपके vimrc में पेस्ट करने के लिए मैपिंग लाइन है:

map <M-DOWN> <DOWN>.

1
:%s/$/,/g

$ लाइन के अंत मैच


2
यही $नहीं, बल्कि लाइन में जोड़ देगा ,
ZyX

2
/gएक पंक्ति में हर घटना पर प्रतिस्थापन प्रदर्शन करने के लिए उपयोग किया जाता है। क्योंकि $एक पंक्ति में केवल एक ही है जिसे आप सुरक्षित रूप से छोड़ सकते हैं।
रोमेल

हाँ, $ पर मेरी गलती है। और / gb habbit से है, और हाँ यह वैकल्पिक है।
कलहर्ट

1

अपने कार्य को पूरा करने के लिए मैक्रो का उपयोग भी किया जा सकता है।

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