Vim boş satırları sil


674

Vim'deki boş satırları kaldırmak için hangi komutu çalıştırabilirim?

Yanıtlar:


1233
:g/^$/d

:gnormal ifadeyle eşleşen satırlarda bir komut yürütür. Normal ifade 'boş satır' ve komut :d(sil)


38
Teşekkürler ruh. Bu benim en sevdiğim cevap, çünkü aslında: g komutunun ne yaptığını açıklıyor.
Tim Swast

4
Bu, tüm boş satırları siler (boşluk karakteri içermez ..), ancak bu benzersiz bir gereklilik olmayabilir. Birisi hala boş satırlardan birini koruyabilir. :%!cat -sseçim olabilir ..
coanor

2
: g / ^ \ s * $ / d satırında 'olası herhangi bir boşluk karakteri' normal
ifadesiyle

180

Buldum, öyle:

g/^\s*$/d

Kaynak: Gücü g at vim wikia

Kısa açıklama :g

:[range]g/pattern/cmd

Bu , her satır eşleştirme modeli için Ex komutu cmd'sini yürüterek belirtilen [aralık] (varsayılan tüm dosya) üzerinde etkili olur (Ex komutu, silme gibi iki nokta üst üste ile başlayan bir komuttur ). Yürütmeden önce:dCmd " ." geçerli satıra ayarlanır.


9
Güzel. Ama tam olarak boş bir satır değil.
innaM

13
Ah, evet, bu sadece boşluk karakterleri içeren satırlarla eşleşecek. Ruhunun cevabını kabul edeceğim.
almost_lunchtime

16
boş satırlarla ve yalnızca beyaz alanlardan oluşan satırlarla eşleşmelidir ... (* sıfır veya \ s ... birden çok örneğiyle eşleşir ...)?
monojohnny

14
Ben saf boşluk TAMAMEN boş bir satır olduğunu iddia ederken, hiçbir boşluk gerçekten daha boş bir satır değildir, değil mi? ;)
Kasapo

4
Oxford, boş bir belgenin "belgeye doldurulması için kalan bir alan" olduğunu söylüyor. Bunu olabildiğince yorumlayın, ama tam da aradığım şey buydu. Teşekkürler!
Joe Tricarico


44

Yalnızca çok boş satırları kaldırmak (tek bir boş satıra indirgemek) ve tek boş satırları olduğu gibi bırakmak için aşağıdakiler kullanılabilir:

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

3
Birisi belirteçlerin ne anlama geldiğini açıklayabilir mi? (Peki, nasıl çalışır?) Teşekkürler.
PAStheLoD

5
\_$bir desenin içinde kullanılabilen çizgi sonu anlamına gelir ( $sadece desenin sonunda kullanılabilir.) Aynı şey bir çizginin başlangıcı\_^ anlamına gelir ve desenin içinde herhangi bir yerde kullanılabilir. Böylece, desen boş bir satırla, bir yeni satırla ve yine boş bir satırla eşleşir. Bkz Vim yardım sayfasını regex .
Wiktor Stribiżew

1
Aynı şeyi yapmanın başka bir yolu::g/^$/,/./-j
SergioAraujo

14
  1. tüm boşluk satırları nasıl kaldırılır

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

    (tüm boş satırlar gittiğinde bunu birkaç kez yapın)

  2. SINGLE boş satır bırakarak tüm boşluk satırları nasıl kaldırılır

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

    (bunu birkaç kez yapın)

  3. MAKSİMUMDA İKİ boş satır bırakarak tüm boşluk satırlarını kaldırma,

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

    (bunu birkaç kez yapın)

^ M girmek için pencerelerde -Q ve control-M'yi kontrol etmeliyim


2
Ayrıca kullanabilirsiniz \ryerine Ctrl-M.
dash-tom-bang

6

Nasıl olur:

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



5

Bu işlev yalnızca iki veya daha fazla boş satırı kaldırın, aşağıdaki satırları vimrc'nize koyun, ardından işlevi çağırmak için \ d kullanın

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

Bu sayfadaki cevaplardan birkaçını denedim, ancak çoğu benim için çalışmadı. Belki Windows 7'de Vim kullandığım için (alay etme, sadece üzülme: p)?

İşte Windows 7'de Vim üzerinde çalışan en kolay olanı:

:v/\S/d

İşte Vim Wikia hakkında daha uzun bir cevap: 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

yapıştırmak

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

.vimrc'nizde, ardından vim'inizi yeniden başlatın. komut: 5,12DBL kullanırsanız, 5. satır ile 12. satır arasındaki tüm boş satırları siler. Bence cevabım en iyi cevap!


Yanıt gönderirken, lütfen neyi değiştirdiğinizi veya eklediğinizi veya nasıl çalıştığını veya bir şeyi açıklayan açıklama ekleyin. Cevabınız çözüm olsa da, bunu okuyan bazı insanlar bunun ne anlama geldiğini veya nasıl çalıştığını anlamıyor olabilir. Ve lütfen ingilizce yap.
Tim

Burada gerçekten önemli değil. Bu soru bir cevap kabul etti 5 yıl önce
Tim

Bence soulmerge'ın cevabı: g / ^ $ / d en iyi cevap değil. ama neden "bu pozdaki tüm düzenlemeleri göster" bölümünde düzenlememi izleyemiyorum?
cn8341

Cevabım cevabından daha iyi, cevabımı kim reddetti ve cevabım neden reddedildi?
cn8341

2

Metninizde çift satır aralıklı bir şey varsa, bu komut çift aralığı kaldırır ve önceden var olan yinelenen boş satırları tek bir boş satıra birleştirir. Bir satırın başlangıcında ^ ^ ^ geçici bir sınırlayıcı kullanır, bu nedenle içeriğinizle çakışırsa başka bir şey seçin. Yalnızca boşluk içeren satırlar boş olarak kabul edilir.

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

2

deleteBoş satırları kaldırmak için ekleme modunda tuşuna basın .


1

Bu benim için çalıştı:

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

Temelde sayı veya harf içermeyen tüm satırları siler. Listemdeki tüm öğelerin harfleri olduğundan, tüm boş satırları sildi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.