Załóżmy, że wpisałeś długi dokument w vimie z automatycznym dzieleniem linii, więc wszystkie linie zostały podzielone na, powiedzmy, 79 znaków. Możliwe, że nawet zastosowałeś formatowanie do całego dokumentu, aby przerwać wszystkie linie na tej długości.
Akapity są oznaczone w dokumencie pustymi wierszami.
Teraz decydujesz, że wcale nie chcesz łamania linii w akapitach.
Jak usunąć wszystkie podziały wierszy w akapitach bez całkowitego wyeliminowania granic akapitów?
Zrobiłem ten szybki i idiotyczny hack, ale szukam właściwego sposobu.
:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ - join all lines in the file
:%s/@@@@@/\r\r/g - replace @@@@@ with line breaks
vim
newlines
carriage-return
dggoldst
źródło
źródło
Odpowiedzi:
Myślę, że robi to, co chcesz: upewnij się, że na końcu pliku jest pusta linia, a następnie dołącz każdy akapit (zakończony pustą linią).
Objaśnienie: najpierw przejdź do końca pliku i dodaj dodatkową pustą linię
:a
(być może jest to bardziej elegancki sposób; interaktywnie możesz zastąpić pierwsze trzy linieo<ESC>
). Następnie dla każdego niepustego wiersza, który nie został jeszcze rozważony (:g/^./
), zastosujjoin
polecenie do zakresu, zaczynając od wybranej linii (.
) i kończąc jeden wiersz przed następnym pustym wierszem (/^$/-1
).Opcjonalnie,
:g/^$/d
jeśli nie chcesz, aby pozostała pusta linia (możesz ją zdjąć-1
).źródło
:g
, które stosuje polecenie do wszystkich pasujących linii; zobacz:help :g
i być może ten wątek o tym, jak się:g
zachowuje po usunięciu podziałów linii .:$pu _
na końcu umieść rejestr czarnej dziury, co powoduje powstanie pustej linii na końcu.To powinno to zrobić:
tw
jest ustawiony na wartość co najmniej tak dużą, jak liczba znaków w najdłuższym akapicie.gg
przesuwa kursor do pierwszego wiersza;gq
to polecenie przeformatowania;G
przesuwa kursor do ostatniego wiersza, mówiącgq
o ponownym sformatowaniu z bieżącego położenia kursora do ostatniego wiersza.źródło
Ustaw kursor w żądanym akapicie
Rodzaj:
vipJ
(
vip
podświetla bieżący akapit,J
łączy wszystkie linie)źródło
Może nie jest to najczystszy sposób, aby to zrobić, ale oto, czego bym użył:
( Działa w VIM 7.2. )
W zależności od tego, w jaki sposób akapity zostały podzielone, gdy były pierwotnie sformatowane, możesz zastąpić
gJ
polecenie (łączenie bez spacji)J
poleceniem (łączenie ze spacjami).Dowolna
999
liczba musi być co najmniej liczbą akapitów w pliku - możesz wybrać większą liczbę, jeśli chcesz i stracić tylko cykle procesora. Zakładając jedną i tylko jedną pustą linię między akapitami, możesz uzyskać dokładniejszą liczbę akapitów, używając:źródło