Vim usuń puste linie


Odpowiedzi:


1233
:g/^$/d

:gwykona polecenie w wierszach pasujących do wyrażenia regularnego. Wyrażenie regularne to „pusta linia”, a polecenie to :d(usuń)


38
Dzięki soulmerge. To moja ulubiona odpowiedź, ponieważ faktycznie wyjaśnia, co robi polecenie: g.
Tim Swast,

4
Spowoduje to usunięcie wszystkich pustych wierszy (nie zawierają żadnych białych znaków ..), ale może to nie być wyjątkowy wymóg. Ktoś może nadal zachować jedną z pustych linii. :%!cat -smoże być wyborem ..
coanor

2
: g / ^ \ s * $ / d z wyrażeniem regularnym „dowolne spacje char” w wierszu
oyd11

180

Znaleziono to:

g/^\s*$/d

Źródło: Power of g at vim wikia

Krótkie wyjaśnienie :g

:[range]g/pattern/cmd

Działa to na określony [zakres] (domyślnie cały plik), wykonując polecenie Ex cmd dla każdego wzorca pasującego do linii (polecenie Ex to jedno rozpoczynające się dwukropkiem, takie jak :dusuwanie). Przed uruchomieniem polecenia cmd.” jest ustawiany na bieżącą linię.


9
Miły. Ale nie do końca pusta linia.
innaM

13
Ach, tak, dopasuje to wiersze zawierające tylko białe znaki. Przyjmę odpowiedź soulmerge.
prawie_lunchtime

16
które powinny pasować do pustych linii ORAZ linii składających się wyłącznie z białych znaków ... (* dopasowuje zero lub wiele wystąpień \ s ...)?
monojohnny,

14
Twierdziłbym, że czysta biała spacja JEST DOKŁADNIE pusta linia, podczas gdy żadna biała spacja nie jest tak naprawdę pustą linią, nie sądzisz? ;)
Kasapo,

4
Oxford twierdzi, że puste miejsce to „miejsce do wypełnienia w dokumencie”. Zinterpretuj to jak możesz, ale tego właśnie szukałem. Dzięki!
Joe Tricarico


44

Poniższych czynności można użyć do usunięcia tylko wielu pustych linii (zredukowania ich do pojedynczej pustej linii) i pozostawienia nienaruszonych pojedynczych pustych linii:

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

3
Czy ktoś mógłby wyjaśnić, co oznaczają tokeny? (Więc jak to działa?) Dzięki.
PAStheLoD

5
\_$oznacza end-of-line , które mogą być używane wewnątrz wzoru ( $może być używany tylko na końcu wzorca.) Tak samo jest z \_^tym, że środki początek linii i może być używany w dowolnym miejscu wewnątrz wzorca. Tak więc wzór pasuje do pustej linii, nowej linii i ponownie pustej linii. Zobacz stronę pomocy Vim regex .
Wiktor Stribiżew

1
Inny sposób na zrobienie tego samego::g/^$/,/./-j
SergioAraujo,

14
  1. jak usunąć wszystkie puste pola

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

    (zrób to wiele razy wykorzystując wszystkie puste linie zniknęły)

  2. jak usunąć wszystkie puste pola pozostawiając POJEDYNCZĄ pustą linię

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

    (zrób to wiele razy)

  3. jak usunąć wszystkie puste pola pozostawiając DWIE puste linie NA MAKSYMALNIE,

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

    (zrób to wiele razy)

aby wprowadzić ^ M, muszę kontrolować-Q i Control-M w systemie Windows


2
Możesz również użyć \rzamiast Ctrl-M.
dash-tom-bang

6

Co powiesz na:

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



5

Ta funkcja usuwa tylko dwa lub więcej pustych wierszy, wstaw poniższe wiersze do vimrc, a następnie użyj \ d, aby wywołać funkcję

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

Próbowałem kilka odpowiedzi na tej stronie, ale wiele z nich nie działało dla mnie. Może dlatego, że używam Vima na Windowsie 7 (nie wyśmiewaj się, po prostu lituj się: p)?

Oto najłatwiejszy, jaki znalazłem, który działa na Vimie w systemie Windows 7:

:v/\S/d

Oto dłuższa odpowiedź na Vim Wikia: 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

pasta

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

w .vimrc, a następnie uruchom ponownie vim. jeśli użyjesz polecenia: 5,12DBL, spowoduje to usunięcie wszystkich pustych linii między 5 a 12 rzędem. Myślę, że moja odpowiedź jest najlepszą odpowiedzią!


Publikując odpowiedzi, dodaj i wyjaśnij, co zmieniłeś lub dodałeś, jak to działa lub coś takiego. Chociaż twoja odpowiedź może być rozwiązaniem, prawdopodobnie niektórzy ludzie, którzy to czytają, nie rozumieją, co to znaczy ani jak działa. I proszę, zrób to po angielsku.
Tim

To tak naprawdę nie ma znaczenia. Na to pytanie przyjęto odpowiedź 5 lat temu
Tim

Myślę, że odpowiedź soulmerge: g / ^ $ / d nie jest najlepszą odpowiedzią. I edytuję, aby poprawić jego odpowiedź za pomocą: g / ^ \ s * $ / d. ale dlaczego nie mogę oglądać mojej edycji w „pokaż wszystkie zmiany w tej pozie”?
cn8341

Moja odpowiedź jest lepsza niż jego odpowiedź, a kto odrzucił moją odpowiedź i dlaczego moja odpowiedź została odrzucona?
cn8341

2

Jeśli coś ma podwójny odstęp między wierszami tekstu, to polecenie usunie podwójne odstępy i połączy istniejące wcześniej powtarzające się puste wiersze w jedną pustą linię. Używa tymczasowego separatora ^^^ na początku linii, więc jeśli koliduje to z twoją treścią, wybierz coś innego. Linie zawierające tylko białe znaki są traktowane jako puste.

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

2

Naciśnij deleteprzycisk w trybie wstawiania, aby usunąć puste linie.


1

To działało dla mnie:

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

Zasadniczo usuwa wszystkie wiersze, które nie mają cyfr ani liter. Ponieważ wszystkie elementy na mojej liście miały litery, usunięte zostały wszystkie puste wiersze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.