2012-07-03 18 views
61

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

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

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

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

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

+0

इसी तरह के प्रश्न [यहां] (http://stackoverflow.com/questions/594448/how-can-i-add-to-the-end-of-each-line-in-vim)। – glts

+0

मुझे कारणों से एक कारण है ... चीजों को करने के एक से अधिक तरीके, और ये सभी प्रभावी हैं और सुरुचिपूर्ण दिखते हैं। – 0xc0de

उत्तर

103

के अंत से मेल खाता है इस फ़ाइल की हर पंक्ति के लिए यह करना होगा:

:%s/$/,/ 

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

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

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

अंतिम पंक्ति में अतिरिक्त '' 'होना चाहिए, '<,'> एस/$ /, /' होना चाहिए। – cjg

16

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

:%s/$/, 

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

$ लाइन

+2

इससे लाइन में '$ 'भी जोड़ा जाएगा, न कि','। – ZyX

+2

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

+0

हाँ, मेरी गलती $, पर। और/जी खरगोश से है, और हाँ यह वैकल्पिक है। – kalhartt

10

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

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

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

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

यह प्रभावी रूप से खाली स्थान के अनुगामी को दूर करने, खाली स्थान के एक अल्पविराम से पंक्ति के अंत से ठीक पहले की किसी भी राशि की जगह लेगा।

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

34

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

:'<,'>norm A, 

:help :normal देखें।

+6

मुझे ये उत्तर पसंद हैं जो विम की एक कम ज्ञात विशेषता प्रदर्शित करते हैं। – Swiss

+0

@ स्विस, आपको यह टिप्पणी पसंद आएगी (http://stackoverflow.com/questions/11303032/how-to-add-text-at-the-end-of-the-each-line-in-vim/ 11305004 # टिप्पणी 14879144_11306510), फिर। – romainl

+0

@ स्विस, आप [udioca के एक्सपोज़] (http://www.reddit.com/r/vimgolf/comments/wmtep/abusing_macros_part_1_normal/) को 'सामान्य' पर भी पसंद कर सकते हैं। मैंने इसे जानकारीपूर्ण पाया! – Conner

3

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

:%s/key.*$/&, 
+0

या ': जी/कुंजी/एस/$ /,'। देखें ': सहायता: वैश्विक'। – romainl

102

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

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

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

तो यह एक संभव समाधान है ,, फिर पुष्टि करने के लिए Esc दबाएं।

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

+0

हू, मेरे लिए काम नहीं करता ... 7.2 से अधिक संस्करण में नई सुविधा? अच्छा लगता है। – weronika

+1

नहीं, यह मानक विम है: विजुअल ब्लॉक मोड ('सी-वी' के साथ) में कुछ लाइनों का चयन करें, फिर कर्सर को' $ 'के अंत में ले जाएं और उन सभी को 'ए' में शामिल करें। आपको [': h v_b_A'] (http://vimdoc.sourceforge.net/htmldoc/visual.html#v_b_A) पसंद आएगा, जो वास्तव में पूरी तरह से है। – glts

+1

ओह, मुझे लगता है कि क्या हो रहा है! मैं आमतौर पर डालने मोड से बाहर निकलने के लिए के बजाय Ctrl-C का उपयोग करता हूं, और स्पष्ट रूप से Ctrl-C के साथ यह काम नहीं करता है! कितना अजीब। – weronika

1

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

A,<ESC> 

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

यहाँ अपने vimrc में पेस्ट करने के मानचित्रण लाइन है:

map <M-DOWN> <DOWN>. 
1

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

qqA,^[[email protected] 
संबंधित मुद्दे