Jakie polecenie mogę uruchomić, aby usunąć puste wiersze w Vimie?
Jakie polecenie mogę uruchomić, aby usunąć puste wiersze w Vimie?
Odpowiedzi:
:g/^$/d
:g
wykona polecenie w wierszach pasujących do wyrażenia regularnego. Wyrażenie regularne to „pusta linia”, a polecenie to :d
(usuń)
:%!cat -s
może być wyborem ..
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
:d
usuwanie). Przed uruchomieniem polecenia cmd „.
” jest ustawiany na bieżącą linię.
:v/./d
lub
:g/^$/d
lub
:%!cat -s
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
\_$
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 .
:g/^$/,/./-j
jak usunąć wszystkie puste pola
:%s,\n\n,^M,g
(zrób to wiele razy wykorzystując wszystkie puste linie zniknęły)
jak usunąć wszystkie puste pola pozostawiając POJEDYNCZĄ pustą linię
:%s,\n\n\n,^M^M,g
(zrób to wiele razy)
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
\r
zamiast Ctrl-M
.
Co powiesz na:
:g/^[ \t]*$/d
praca z perlem w vimie:
:%!perl -pi -e s/^\s*$//g
chomp
wykonałby tej pracy?
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>
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
: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ą!
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/^^^^.*
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.