विम में हर दूसरी पंक्ति में कैसे शामिल हों?


28

मैं बहुत सी (~ 1000) लाइनों में शामिल होना चाहता हूं, लेकिन अगले वाले के साथ हर अजीब। हाथ से मैं कर सकता था

Jj

500 बार और यह किया है। हालाँकि, मैं एक एकल आदेश में 500 बार इन दोनों कथनों को कैसे निष्पादित कर सकता हूं? टाइपिंग

500Jj

अगली 500 लाइनों में शामिल हो जाएगा और फिर एक लाइन को नीचे ले जाएगा।

उदाहरण:

मेरे पास है:

a
b
c
d
e
f
g
h

मुझे चाहिए:

a b
c d
e f
g h

संपादित करें: मैंने मानचित्रण की कोशिश की:

:map X Jj
500X

लेकिन स्पष्ट रूप से मुझे मैपिंग डॉक्स को फिर से पढ़ना चाहिए। काम नहीं करता है।

जवाबों:


30

मैं यह करूँगा:

  1. मैक्रो 'q' रिकॉर्ड करना शुरू करें: qqJjq

  2. 500 बार मैक्रो 'q' को फिर से देखें: 500@q

(वास्तव में यह 'q' नामक मैक्रो नहीं है, यह एक नामित रजिस्टर है जिसे 'q' कहा जाता है। अंतःक्रियात्मक रूप से उस रजिस्टर को 1. की तरह भरें, आप भी कर सकते हैं :let @q = "Jj"और फिर 2. कर सकते हैं।)


कूल, मुझे मैक्रों को याद करने के लिए धन्यवाद!
बोल्ड्यूविन

:% सामान्य J बहुत त्वरित और आसान था (नीचे 2 शीर्ष समाधान देखें) ... इस मैक्रो समाधान की तुलना में यह 50,000 से अधिक लाइनों पर चल रहा है
ihightower

@ अंत में यही कारण है कि मैंने उस उत्तर को भी उकेरा है। 6 साल पहले :)
अकीरा

@ मैकिरा आपके मैक्रो ने मेरे दिन को बचा लिया क्योंकि मुझे आज इस मैक्रो सॉल्यूशन की जरूरत थी।
इहोवर

24

फ़ाइल की प्रत्येक पंक्ति पर ऐसा करने के लिए:

:%normal J

या, छोटा:

:%norm J

फ़ाइल के केवल एक हिस्से पर ऐसा करने के लिए, लाइनों का चयन करें Vया किसी अन्य तरीके से सीमा प्राप्त करें:

:'<,'>global/^/normal J

या, छोटा:

:'<,'>g/^/norm J

केविन वह केवल एक ही नहीं बल्कि हर फाइल पर दो कमांड चलाना चाहता है।
JNK

1
:gउत्तर ओपी की जरूरत का उपयोग ।
ल्यूक हरमिट

2
यह वास्तव में हर दूसरी पंक्ति में शामिल हो जाएगा। कोशिश करो!
केविन पैंको

globalट्रिक के लिए धन्यवाद । हालांकि मेरे मामले में, मैक्रो रिकॉर्ड करना आसान और तेज़ था।
बोल्ड्यूविन

2
बस एक अनुमान - यह प्रत्येक पंक्ति में आदेश पर कार्य को अंजाम देता है, और पहली पंक्ति को करने के बाद, दूसरी पंक्ति अब चली गई है (पहली पंक्ति के साथ जुड़ गई है), इसलिए इसे तीसरी पंक्ति पर जाने के लिए मजबूर किया जाता है।
केविन पैंको

9

इस बारे में क्या:

:g/$/j  

या

:g/$/j!  

और हर तीन पंक्तियों के समूह

:g/$/j3 

1
यह एक बहुत अच्छा समाधान Miro है। यह और भी बेहतर है कि आप मानक vi में भी इसका उपयोग कर सकते हैं, हालांकि अजीब बात है, जब आप j3 बनाने के बजाय SVR4.0 vi (सोलारिस पर) में अनुगामी संख्या का उपयोग करते हैं तो यह 3 कॉलम बनाता है 4. (इसलिए आपको उपयोग करने की आवश्यकता है j2 वहाँ हर 3 लाइनों के समूहन के लिए)
JohnGH


-1

मैं विम का उपयोगकर्ता नहीं हूं, लेकिन यह दिखने वाले ऑनलाइन डॉक्स की जांच कर रहा है

500(Jj) 

यह काम कर सकता है क्योंकि यह चीजों को एक इकाई के रूप में कोष्ठक को दर्ज करता है।


एचएम, कोशिश के लिए धन्यवाद, लेकिन मेरे संस्करण में विम केवल कोष्ठक की उपेक्षा करता है। क्या आप मुझे वह लिंक बता सकते हैं जहाँ आपको यह सिंटैक्स मिला है?
बोल्ड्यूइन जूल

1
vimdoc.sourceforge.net/htmldoc/syntax.html - क्षमा करें यह मदद नहीं की!
JNK

वास्तव में इस लिंक की जाँच करें: vim.org/scripts/script.php?script_id=2136 देखें कि क्या वह करता है जिसके बाद आप हैं।
JNK
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.