मैं vi में दो लाइनें कैसे शामिल करूं?


169

मेरे पास नीचे की तरह एक पाठ फ़ाइल में दो पंक्तियाँ हैं:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

मैं नीचे की तरह vi में दो पंक्तियों को जोड़ना चाहता हूं:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

दूसरी पंक्ति हटा दी गई और दूसरी पंक्ति की सामग्री को पहली पंक्ति में जोड़ दिया गया।

मैं vi में कमांड मोड का उपयोग कैसे कर सकता हूं?

जवाबों:


310

Shift+ Jवर्तमान लाइन से लाइन परिवर्तन वर्ण को हटाता है, इसलिए लाइन में किसी भी स्थान पर "जे" दबाकर आप वर्तमान लाइन और अगली पंक्ति को उस तरह से जोड़ सकते हैं जिस तरह से आप चाहते हैं।


9
ऊपरी मामला J लाइनों से जुड़ता है, निचला केस कर्सर को स्थानांतरित करता है

4
वह एक राजधानी J थी, एक निचली स्थिति J नहीं; इसलिए शिफ्ट-जे।
जोनाथन लेफ़लर

28
"वर्तमान लाइन से लाइन चेंज कैरेक्टर को हटाता है" जे क्या करता है यह वर्णन करने के लिए एक बहुत ही अजीब तरीका है, और वास्तव में सही भी नहीं है। J अगली पंक्ति में "जुड़ता है"। इस प्रक्रिया में यह नई रेखा को हटा देता है, लेकिन अन्य तरीकों से भी व्हाट्सएप में हेरफेर करता है।
लॉरेंस गोंसाल्वेस

5
Haha। GJमें vimअंतिम पंक्ति में चले जाएँगे और फिर अगली पंक्ति में शामिल होने के लिए प्रयास करते हैं, केवल एक आदेश में शामिल होने के मतलब नहीं है जगह। हाँ, मुझे यह हास्यास्पद :-)
आलोक सिंघल

2
मुझे अभी भी महसूस नहीं हो सकता है कि मुझे इस संपादक का उपयोग करके दो लाइनों में शामिल होने के लिए StackOverflow पर जाने की आवश्यकता है!
मणित्रा अण्डीमित्रोंद्रा

59

वि या विम?

वैसे भी, निम्नलिखित कमांड विम के लिए 'नोकोम्पेटिबल' मोड में काम करता है। यही है, मुझे लगता है, लगभग शुद्ध vi।

:join!

यदि आप इसे सामान्य कमांड उपयोग से करना चाहते हैं

gJ

'जीजे' के साथ आप लाइनों को जोड़ते हैं - बिना व्हाट्सएप जोड़े या हटाए:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

परिणाम:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

'J' कमांड के साथ आपके पास होगा:

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT

type>और के बीच की जगह पर ध्यान दें _ID


2
बस यह इंगित करना चाहते हैं कि g/pattern/joinवीआईएम में काम करता है जबकि g/pattern/Jनहीं करता है। भविष्य के कुछ लोगों की मदद कर सकते हैं।
जिसाकस्टोन

मुझे पैटर्न के साथ आपका जुड़ाव पसंद है, हालांकि, यह सफेद स्थान के साथ दो लाइनों को जोड़ता है। वैसे भी सफेद स्थान के बिना एक पैटर्न के साथ दो लाइनों में शामिल होने के लिए?
डेविड.छू.का

जी / पैटर्न / में शामिल होने! ऐसा लगता है।
फोर्टबीज

1
क्या यह अधिक जटिल हो सकता है, कृपया! :-)
जोहान्स ओवरमैन

22

यह करना चाहिए:

J


6
'J' लाइनों को मिलाते समय अतिरिक्त स्थान देता है।
मैक्सिम किम

3
@MaximKim: और यही कारण है । ध्यान दें कि :h Jआपको उस सुविधा को अक्षम करने का तरीका बताएगा।
ेरेऑन

2
gJयदि आप लाइनों में शामिल होने के लिए स्थान जोड़ना नहीं चाहते हैं तो उपयोग करें
qwertzguy

17

Vi में, J(यह Shift+ J) है या :joinआपको वही करना चाहिए जो आप चाहते हैं, अधिकांश भाग के लिए। ध्यान दें कि वे व्हाट्सएप को समायोजित करते हैं। विशेष रूप से, आप कई मामलों में दोनों सम्मिलित लाइनों के बीच एक स्थान के साथ समाप्त करेंगे, और यदि दूसरी पंक्ति को संकेत दिया जाता है कि जुड़ने से पहले इंडेंटेशन हटा दिया जाएगा।

विम में आप gJ( G, फिर Shift+ J) या का उपयोग कर सकते हैं :join!। ये बिना किसी व्हाट्सएप समायोजन के लाइनों में शामिल हो जाएंगे।

विम में, :help Jअधिक जानकारी के लिए देखें।


एक चेतावनी का उपयोग करते समय gJऔर Jहै कि दोनों चांग में शामिल होने के मुद्दे पर कर्सर, लेकिन :join!और :joinन।
सर्जियोअराउजो

4

बस " \n" के साथ "" बदलें ।

दस्तावेज़ में प्रत्येक पंक्ति के लिए vi / Vim में:

%s/>\n_/>_/g

यदि आप हर प्रतिस्थापन की पुष्टि करना चाहते हैं:

%s/>\n_/>_/gc

3

यदि आप चयनित लाइनों में शामिल होना चाहते हैं (आप दृश्य मोड में हैं), तो बस gJअपनी लाइनों को बिना किसी रिक्त स्थान के साथ जुड़ने के लिए दबाएं ।

यह vi / Vim स्टैक एक्सचेंज साइट पर अधिक विस्तार से वर्णित है ।


1

पहली पंक्ति पर Shift+ 4("$") दबाएं , फिर Shift+ j("जे")।

और यदि आप मदद चाहते हैं, तो vi में जाएं, और फिर दबाएँ F1


3
पंक्ति के अंत करने के लिए $ चलता रहता है, लेकिन यह जम्मू के लिए आवश्यक नहीं है

1
आपको J के लिए लाइन में शामिल होने के लिए लाइन के अंत में होना आवश्यक नहीं है।
जोनाथन लेफ़लर

1
$ दबाना वास्तव में आवश्यक नहीं है।
लॉरेंस गोंसाल्वेस

1
@ लॉरेंस .pressing $ यह सुनिश्चित करता है कि कर्सर को नई लाइन चार्टर के ठीक बगल में रखा गया है और यह एक जरूरी है।
विजय


1

उस लाइन पर कर्सर रखे बिना दो लाइनों को मिलाने का दूसरा तरीका है:

:6,6s#\n##

यहां 6 लाइन नंबर है जिस पर एक और लाइन जुड़ जाएगी। लाइन नंबर प्रदर्शित करने के लिए, का उपयोग करें :set nu

यदि हम उस कर्सर पर हैं जहां अगली पंक्ति शामिल होनी चाहिए, तो:

:s#\n##

दोनों ही मामलों में हम की जरूरत नहीं है gकी तरह है :s#\n##g, क्योंकि एक पंक्ति में केवल एक पर \nअस्तित्व।


Shift+Vअंतिम को छोड़कर, शामिल होने वाली सभी पंक्तियों का चयन करना आसान है , और फिर :'<,'>s/\n/, /इस उदाहरण में प्रत्येक के अंत में अल्पविराम और एक स्थान डालते हुए लाइनों को जोड़ना शामिल है। ध्यान दें कि जब कुछ चुना जाता है और हम :सामान्य मोड में टाइप करते हैं, तो '<,'>कमांड लाइन पर स्वचालित रूप से दिखाई देता है।
इवगेनी सर्गेव

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