VIM में, मैं वास्तव में लंबी लाइन को कई लाइनों में कैसे तोड़ सकता हूं?


169

कहो कि मेरे पास VIM एडिटर में एक सुपर लंबी लाइन है (लगभग 300+ अक्षर)। मैं इसे कई लाइनों में कैसे तोड़ूंगा ताकि शब्द सीमाएं लगभग 80 वर्णों तक टूट जाएं?

उदाहरण:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line

सेवा

This is a really long line 
This is a really long line
This is a really long line
This is a really long line
This is a really long line
This is a ...

जवाबों:


254

विम यह बहुत आसान करता है (शब्द सीमाओं पर लाइनों को तोड़ना)।

gq{motion} % format the line that {motion} moves over
{Visual}gq % format the visually selected area
gqq        % format the current line
...

मेरा सुझाव है कि आप बाहर की जाँच करें :help gqऔर :help gw

twटाइपिंग के दौरान पार हो जाने पर टेक्स्टसेट की सेटिंग ( ) आपको ऑटो लाइन ब्रेक देगी। इसका उपयोग gqबहुत अधिक मात्रा में किया जाता है, हालाँकि यदि gqविंडो साइज़ या 79 के आधार पर अक्षम हो जाता है , जिसके आधार पर यह पहले आता है।

:set tw=80

पाठ चौड़ाई को शामिल करने के लिए प्रारूप विकल्पों को सेट करके vim स्वचालित रूप से ट्व सेटिंग पर टूट जाएगा।

:set fo+=t

5
तो आपके मामले के लिए, gqकमांड होगा <ESC>(इंसर्ट / रिप्लेस / वगैरह मोड से बाहर निकलें), फिरgq80l
आधी रात को

6
यह Ctrl + j के विपरीत है (कई लाइनों को एक में जोड़ता है)।
यजीर रामिरेज़

9
विम मुझे विस्मित करना बंद नहीं करता। यह शुद्ध सोना है।
जोंडलम

10
बस अगले व्यक्ति के लिए जो यह पाता है, gq केवल ठोस पाठ की एक पंक्ति को विभाजित नहीं करेगा, उसे अपनी बात करने के लिए
व्हॉट्सएप की

2
[रन gqq] आआआह्ह्ह, यह सुंदर है
अंडरस्कोर_ड

85

सबसे पहले अपना vim सेट करें ताकि यह समझ सके कि आप 80 अक्षर चाहते हैं:

:set tw=80

फिर, लाइन को hilight करें:

V

और इसे सुधारें:

gq

17

यह वास्तव में VIM से संबंधित नहीं है, लेकिन आप fmt प्रोग्राम का उपयोग कर सकते हैं

$ fmt myfile

38
:%! fmt% "इससे संबंधित
विमोचन

2
Vi के लिए उपयोगी, हालांकि मैं vim पर gqq पसंद करूंगा।
WhyNotHugo

13

पाठ की ठोस रेखाओं के लिए सामान्य मोड में v का उपयोग करके क्षेत्र को हाइलाइट करें, फिर दबाएं

:s/\v(.{80})/\1\r/g

यह प्रत्येक 80 वें वर्ण के अंत में एक नई पंक्ति जोड़ेगा।

:s/       replaces within the current select
\v        uses regular expressions
(.{80})   selects 80 characters & placed them into group one
\1\r      replaces group one with group one and a newline

यह एकमात्र समाधान है जिसने लंबे बेस 64 स्ट्रिंग के लिए काम किया है।
jviotti

6

यदि आप * nix पर हैं तो आप शायद foldउपलब्ध हैं।

उस क्षेत्र का चयन करें जिसका आप उपयोग करना चाहते हैं v, फिर आप 80 का उपयोग करके चौड़ाई पर रिक्त स्थान को तोड़ सकते हैं:

!fold --spaces --width=80

यह उपयोग करने के समान ही है gq

हालाँकि, यदि आप केवल चरित्र 80 पर टूटना चाहते हैं और व्हाट्सएप पर प्रतिबंधित नहीं हैं, तो आप इसका उपयोग कर सकते हैं:

!fold --width=80

यदि आप इसे एक कीस्ट्रोक के साथ चाहते हैं तो बस एक मैपिंग सेट करें - मैंने उपयोग किया है

vmap <f1> !fold --width=80<CR>


यह वह उत्तर है जो व्हॉट्सएप द्वारा अलग नहीं किए गए लंबे तारों के लिए काम करता है। MacOS पर आपको गुना के बजाय gfold का उपयोग करने की आवश्यकता हो सकती है, हालांकि।
एरोन डी

मैक ओएस पर, मैं करना था डब्ल्यू गुना 80!
user674669

5

पहले से मौजूद लाइन ब्रेक को हटाए बिना पूर्ण दस्तावेज़ में लंबी लाइनों को विभाजित करने के लिए, उपयोग करें:

:set formatoptions+=w
:set tw=80
gggqG

4

मुझे एक पंक्ति के बजाय संपूर्ण फ़ाइल को पुन: स्वरूपित करने की आवश्यकता थी। जैसा कि वर्नसी बताते हैं, मैं 'fmt' का उपयोग कर सकता था, लेकिन निम्नलिखित क्रम में विम ने भी चाल चली (यहाँ के विभिन्न उत्तरों से उधार):

<ESC>
:setl tw=80 fo=t
1GVGgq

3

एक त्वरित और बुरा के रूप में, शायद निम्नलिखित मानचित्र का प्रयास करें:

map q 080lwbels<CR><ESC>

जो कहते हैं:

  • लाइन की 0 वीं स्थिति शुरू करें,
  • दायीं ओर 80 वें चार की ओर बढ़ें,
  • अगले शब्द की शुरुआत में जाएं,
  • पिछले शब्द पर वापस जाएं,
  • वर्तमान शब्द के अंत में जाएं,
  • एक चार सही जाओ, और
  • उस चार के लिए एक सीआर का विकल्प।

तब q और CR मारकर लाइन को शब्द सीमा पर विखंडू में तोड़ देंगे।


0

मैंने आखिरी व्हाट्सएप पर 80 कॉलम से पहले प्रत्येक LONGLINE में मैन्युअल रूप से '\' (और फिर CR / टैब को फॉर्मेट में) डाला। यानी:

1 this is a long, long, line

अब जैसा दिखता है

1 this is a long, \
        long line

और सामान्य रूप से संकलित करता है।

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