रिक्त लाइनों को हटा दें


674

विम में खाली लाइनों को हटाने के लिए मैं क्या कमांड चला सकता हूं?

जवाबों:


1232
:g/^$/d

:gएक पंक्तियों पर एक कमांड निष्पादित करेगा जो एक रेगेक्स से मेल खाता है। Regex 'रिक्त पंक्ति' है और कमांड है :d(हटाएं)


38
आभार आत्माजी यह मेरा पसंदीदा उत्तर है, क्योंकि यह वास्तव में बताता है: g कमांड क्या करता है।
टिम स्वस्त

4
यह सभी खाली लाइनों को हटा देगा (जिसमें कोई सफेद स्थान वर्ण नहीं होता है ..), लेकिन यह अद्वितीय आवश्यकता नहीं हो सकती है। कोई अभी भी खाली लाइन में से एक रख सकता है। :%!cat -sपसंद हो सकता है ..
5

2
: g / ^ \ s * $ / d लाइन में 'किसी भी संभावित स्पेस चार' के
रेगेक्स के साथ

180

यह मिला, यह है:

g/^\s*$/d

स्रोत: द पॉवर ऑफ ग्राम पर vim विकिया

की संक्षिप्त व्याख्या :g

:[range]g/pattern/cmd

यह प्रत्येक लाइन मिलान पैटर्न के लिए पूर्व कमांड cmd निष्पादित करके ( निर्दिष्ट पूरी रेंज) (डिफ़ॉल्ट पूरी फ़ाइल) पर कार्य करता है , (एक पूर्व कमांड एक कोलो के साथ शुरू होता है जैसे कि डिलीट के लिए)। Cmd निष्पादित करने से पहले , " " वर्तमान लाइन पर सेट है।:d.


9
अच्छा लगा। लेकिन बिलकुल कोरी रेखा नहीं।
इन्नाम

13
आह, हाँ, यह केवल व्हॉट्सएप वर्ण वाली रेखाओं से मेल खाएगा। मैं स्पिरमेज का उत्तर स्वीकार करूंगा।
लगभग_लंचटाइम

16
कि रिक्त लाइनों और रेखाओं से मेल खाना चाहिए केवल व्हाट्सएप से बना है ... (* शून्य या एकाधिक उदाहरणों से मेल खाता है ...)?
मोनोजोनी

14
मैं शुद्ध व्हाट्सएप का तर्क दूंगा कि क्या वास्तव में एक खाली रेखा है, जबकि कोई भी व्हाट्सएप वास्तव में एक खाली रेखा से अधिक नहीं है, फिर भी आपको नहीं लगता? ;)
कासापो

4
ऑक्सफोर्ड का कहना है कि एक रिक्त "एक दस्तावेज़ में भरे जाने के लिए एक स्थान छोड़ा गया है"। व्याख्या करें कि जैसा आप कर सकते हैं, लेकिन यह वही है जो मैं देख रहा था। धन्यवाद!
जो ट्रिकारिको

53
:v/./d

या

:g/^$/d

या

:%!cat -s

7
इसके साथ नीट ट्रिक: v /./ d (टाइप करने में आसान) लेकिन फिर आपको a: nohl after करना होगा।
मोगेन

1
@ClaesMogren या नियंत्रण-एल पर उछाल
jm3

6
@zladuric के अनुसार vim.wikia.com/wiki/Power_of_g यह फिर से वैश्विक है (इसलिए यह हर उस चीज़ पर कमांड करता है जो मेल नहीं खाता)
adam_0

44

निम्नलिखित का उपयोग केवल बहु रिक्त लाइनों को हटाने के लिए किया जा सकता है (उन्हें एक एकल रिक्त पंक्ति में कम करें) और एकल रिक्त लाइनों को बरकरार रखने के लिए:

:g/^\_$\n\_^$/d

3
क्या कोई समझा सकता है कि टोकन का क्या मतलब है? (तो, यह कैसे काम करता है?) धन्यवाद।
PAStheLoD

5
\_$अंत का मतलब है कि एक पैटर्न के अंदर इस्तेमाल किया जा सकता है ( $केवल पैटर्न के अंत में इस्तेमाल किया जा सकता है।) उसी के साथ एक लाइन की शुरुआत का\_^ मतलब है और पैटर्न के अंदर कहीं भी इस्तेमाल किया जा सकता है। तो, पैटर्न एक खाली रेखा, एक नई रेखा और फिर से एक खाली रेखा से मेल खाता है। विम रेगेक्स सहायता पृष्ठ देखें ।
विकटोरिया स्ट्राइब्यू

1
ऐसा ही करने का एक और तरीका::g/^$/,/./-j
सर्जियोआराज़ो

14
  1. कैसे सभी रिक्त लाइनों को हटाने के लिए

    :%s,\n\n,^M,g
    

    (क्या यह कई बार सभी खाली लाइनों का उपयोग किया गया)

  2. कैसे सभी खाली लाइनों को दूर करने के लिए SINGLE खाली लाइन को छोड़कर

    :%s,\n\n\n,^M^M,g
    

    (ऐसा कई बार करें)

  3. कैसे MAXIMUM में दो खाली लाइनों को छोड़कर सभी खाली लाइनों को हटाने के लिए,

    :%s,\n\n\n\n,^M^M^M,g
    

    (ऐसा कई बार करें)

इनपुट के लिए ^ एम, मुझे विंडोज़ में कंट्रोल-क्यू और कंट्रोल-एम करना है


2
के \rस्थान पर भी उपयोग कर सकते हैं Ctrl-M
डैश-टॉम-बैंग

6

कैसा रहेगा:

:g/^[ \t]*$/d

5

विम में पर्ल के साथ काम करें:

:%!perl -pi -e s/^\s*$//g


मेरा पर्ल थोड़ा जंग खा सकता है, लेकिन यह chompभी काम नहीं करेगा ?
मार्क के कोवन


5

यह फ़ंक्शन केवल दो या अधिक रिक्त लाइनों को हटाता है, नीचे की रेखाओं को अपने vimrc में डालता है, फिर फ़ंक्शन को कॉल करने के लिए \ d का उपयोग करें

fun! DelBlank()
   let _s=@/
   let l = line(".")
   let c = col(".")
   :g/^\n\{2,}/d
   let @/=_s
   call cursor(l, c)
endfun
map <special> <leader>d :keepjumps call DelBlank()<cr>

4

मैंने इस पृष्ठ पर कुछ उत्तरों की कोशिश की, लेकिन उनमें से बहुत से मेरे लिए काम नहीं कर पाए। शायद इसलिए कि मैं विंडोज 7 पर विम का उपयोग कर रहा हूं (मजाक न करें, बस मुझ पर दया करें: पी)?

यहाँ सबसे आसान है जो मैंने पाया कि विंडोज 7 में विम पर काम करता है:

:v/\S/d

यहाँ विम विकिया पर एक लंबा जवाब दिया गया है: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines


3
:g/^\s*$/d
^ begin of a line
\s* at least 0 spaces and as many as possible (greedy)
$ end of a line

पेस्ट

:command -range=% DBL :<line1>,<line2>g/^\s*$/d

अपने .vimrc में, फिर अपना vim पुनः आरंभ करें। यदि आप कमांड का उपयोग करते हैं: 5,12DBL यह 5 वीं पंक्ति और 12 वीं पंक्ति के बीच की सभी रिक्त लाइनों को हटा देगा। मुझे लगता है कि मेरा जवाब सबसे अच्छा जवाब है!


उत्तर पोस्ट करते समय, कृपया यह बताएं और व्याख्या करें कि आपने क्या बदला या जोड़ा या यह कैसे काम करता है या कुछ और। भले ही आपका जवाब समाधान हो सकता है, यह संभावना है कि इसे पढ़ने वाले कुछ लोग यह नहीं समझते हैं कि इसका क्या अर्थ है या यह कैसे काम करता है। और कृपया इसे अंग्रेजी में करें।
टिम

वास्तव में यहाँ कोई फर्क नहीं पड़ता। इस सवाल का जवाब 5 साल पहले स्वीकार किया गया था
टिम

मुझे लगता है कि आत्माओं का जवाब: g / ^ $ / d सबसे अच्छा जवाब नहीं है। और मैं उसके जवाब को बेहतर बनाने के लिए संपादित करता हूं: g / ^ \ s * $ / d। लेकिन मैं अपने संपादन को "इस मुद्रा में सभी संपादन क्यों नहीं दिखाता" देख सकता हूं?
cn8341

मेरा उत्तर उसके उत्तर से बेहतर है, और जिसने मेरे उत्तर को अस्वीकार कर दिया और मेरे उत्तर को अस्वीकार क्यों किया गया?
cn8341

2

यदि किसी चीज़ ने आपके टेक्स्ट को डबल लाइन्स्पोज़ किया है तो यह कमांड डबल स्पेसिंग को हटा देगा और पहले से मौजूद रिपीटिंग ब्लैंक लाइनों को एक सिंगल ब्लैंक लाइन में मर्ज कर देगा। यह एक लाइन के शुरू में ^ ^ ^ के एक अस्थायी सीमांकक का उपयोग करता है, ताकि यदि आपकी सामग्री के साथ यह झड़प कुछ और हो। केवल व्हाट्सएप वाली लाइनों को रिक्त माना जाता है।

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*

2

deleteरिक्त लाइनों को हटाने के लिए इन्सर्ट मोड में की दबाएं ।


1

यह मेरे लिए काम किया:

:%s/^[^a-zA-Z0-9]$\n//ig

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

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