Jedynym powodem, dla którego kiedykolwiek edytowałem plik tekstowy w Pico lub Nano, a nie w Vimie, było polecenie „Justify” ^J. Przeformatuje akapit tekstu, tworząc podziały wierszy przy podziale wyrazu, dzięki czemu tekst będzie ładnie unosił się na ekranie o stałej szerokości - sformatuj tekst, aby pasował do predefiniowanych 80 kolumn, tworząc podziały wierszy tylko między wyrazami. Ograniczona funkcja była bardzo przydatna, czy sformatować długie bloki komentarzy, pliki dokumentacji, czy po prostu zastąpić niekończącą się linię parametrów czymś bardziej czytelnym.
Czy mogę zrobić coś takiego w Vimie?
'formatprg'
opcję.Na ten temat jest świetny VimCast.
http://vimcasts.org/episodes/formatting-text-with-par/
Zasadniczo musisz zainstalować
par
:A potem, ponieważ chcesz zawinąć kolumny w 80 kolumn:
Teraz możesz używać
gq
operatora, jak w innych odpowiedziach (np.gqip
), A on użyje Par zamiast wbudowanego formatyzatora Vima.Par jest dość zaawansowany i ładnie sformatuje takie komentarze:
źródło
Od
:help usr_25
:Wszystko, co musisz zrobić, to uruchomić
a następnie wpisz
uzasadnić tekst w całym pliku.
(Oczywiście możesz również dodać
ru macros/justify.vim
do swojego .vimrc, więc nie musisz go wpisywać za każdym razem.)Uwaga : nie dodaje to podziałów linii. Musisz dodać je ręcznie za pomocą
gq
. W tym celu należy również ustawićtextwidth
(domyślnie 0) żądaną wartość za pomocąi - jeśli chcesz - automatyczne zawijanie tekstu poprzez ustawienie opcji
t
-flag za pomocąJeśli chcesz, możesz ustawić mapowanie w swoim .vimrc, aby zrobić wszystko za Ciebie:
Przenosi się na początek pliku (
gg
), zawija wszystkie linie (gq
doG
), a następnie_j
ustala tekst.źródło
:set fo+=a
opcję automatycznego formatowania całego akapitu. Sprawdź:help fo-table
inne opcje. Jest też ładny poradnik wideo tutaj ._j
Mapowanie dodane przez makro wydaje się uzasadniać cały plik dla mnie, albo może być ograniczona z linewise selekcji wizualnej.Chociaż pomoc nano wywołuje
^J
polecenie „Justify”, tak naprawdę nie usprawiedliwia tekstu, ale formatuje tekst przerywając linie przed prawym marginesem ekranu (lub, jak sądzę, w jakiejś konfigurowalnej kolumnie).Możesz zrobić to samo w VIM, ustawiając zmienną
textwidth
z:help 'textwidth'
:To znaczy: kiedy piszesz, jeśli linia jest dłuższa niż
textwidth
znaki, VIM zawinie linię na pierwszej spacji, aby długość linii była mniejsza lub równatextwidth
.Aby to zadziałało, opcja
formatoptions
musi zawierać literęt
. Zobacz:help 'formatoptions'
i:help fo-table
dla dostępnych opcji, na przykład może być zainteresowany wc
opcji do formatowania pracę z komentarzami.Edit : można wykonać tę samą operację, bez konieczności umieścić
t
wformatoptions
, używając poleceniagw{motion}
, to formatuje tekst pomiędzy bieżącym położeniu kursora i pozycji kursora po{motion}
.gw
Polecenie jest dostępne również w trybie wizualnym, to formatowanie zaznaczonego tekstu.źródło
Oto dwie proste opcje:
!fmt
!}fmt
Oba z nich wysyłają blok tekstu do unixa
fmt
, sprawdźman fmt
opcje. Możesz przekazać argumenty opcji z vima. Na przykład, aby sformatować blok o szerokości 50 znaków, wpisz!}fmt -w 50
.źródło
:%!fmt
i cofając za pomocą jednego,u
jeśli nie podoba ci się wynik.Zaznacz tekst za pomocą polecenia wizualnego, a następnie użyj:
gdzie 40 oznacza szerokość kolumny i
j
oznacza uzasadnienie.źródło
par
) i dlaczego twoje rozwiązanie działa. Możesz dodać więcej szczegółów, aby poprawić jakość odpowiedzi i uczynić ją bardziej przydatną dla przyszłych czytelników.