2010-06-13 13 views
186

Wiem, że istnieją sposoby automatycznego ustawiania szerokości tekstu w vim przy użyciu set textwidth (jak Vim 80 column layout concerns). To, czego szukam, to coś podobnego do = (polecenie linii wcięcia), ale do 80. W przypadku użycia edytujesz tekst z szerokością tekstu, a po połączeniu linii lub usunięciu/dodaniu tekstu jest on źle zawijany.Polecenie vim do restrukturyzacji/wymuszania tekstu do 80 kolumn

Idealnie, to polecenie całkowicie zreorganizuje wybrane przeze mnie linie i odetnie długie linie, dodając do krótkich. Przykład:

long line is long! 
short 

Po uruchomieniu polecenia (przy założeniu, że okład był 13 cols):

long line is 
long! short 

Jeśli nie jest to możliwe z polecenia prawdziwej vim, może tam jest programem wiersza poleceń co robi, że mogę potokować dane wejściowe?

Po poszukiwaniach znalazłem ten odnośnik, który ma kilka dodatkowych opcji: http://www.cs.swarthmore.edu/help/vim/reformatting.html

+6

Być może zainteresuje was również fakt, że Vim może przekazywać formatowanie tekstu do zewnętrznego programu, takiego jak [par] (http://www.nicemice.net/par/). Zrobiłem screencast, który pokazuje, jak [formatować tekst z par] (http://vimcasts.org/e/18). – nelstrom

+0

@nelstrom thanks, TIL about 'par'. To jest fantastyczne! –

+1

Kiedy chcesz, aby tekst wyglądał na szczupły i przycięty (dobrze wyciąć?), Zawsze myśl o 'gq' - [Gentleman's Quarterly] (http://www.gq.com/). (Przeprosiny za antropomorfizację samca, ale prace z mnemonikami.) – ruffin

Odpowiedz

297

Set textwidth do 80 (:set textwidth=80), przejść do początku pliku (można zrobić z Ctrl - Home lub gg) i wpisz gqG.

gqG formatuje tekst zaczynając od bieżącej pozycji i na końcu pliku. Jeśli to będzie możliwe, automatycznie połączy kolejne linie. Możesz umieścić pustą linię między dwoma liniami, jeśli nie chcesz, aby te dwa zostały połączone.

+44

FYI: 'gqq' formats current line. –

+7

Działa również z wyborami wizualnymi. Np. Coś takiego: 'V} gq'. W ten sposób widzisz, co masz zamiar sformatować przed faktycznym formatowaniem. – Plouff

+3

Nawiasem mówiąc, co dokładnie robi 'q' samo? – RichouHunter

77

Rozwiązanie Michaela jest kluczowe, ale najczęściej stwierdzam, że chcę sformatować resztę bieżącego akapitu; dla tego zachowania użyj gq}.

+13

rozwijanie tego - możesz użyć gq , aby sformatować, co chcesz. –

+0

Opcja "nojoinspaces", która zapobiega pojawianiu się dwóch spacji po okresach łączenia linii w granicy zdania. Dobrze, gdy styl typograficzny to pojedyncze spacje między zdaniami w języku angielskim. –

30

Możesz użyć gq z dowolnym operatorem ruchu. Na przykład, jeśli chcesz ponownie sformatować na końcu bieżącego wiersza (tj. Owinąć linię, na której znajduje się kursor), możesz również ponownie sformatować, zaznaczając tekst w trybie wizualnym (używając `v i przenoszenie), a następnie wpisywanie gq.

Istnieją również inne opcje wymuszania zawijania linii.

Jeśli chcesz vim do zawijania swoje linie gdy jesteś wstawiania tekstu w nich, zamiast czekać do końca restrukturyzacji tekstu, znajdziesz te opcje przydatne:

:set textwidth=80 
:set wrapmargin=2 

(Don” t dostać side-śledzone przez wrap i linebreak, który tylko sformatować tekst wyświetlany na ekranie, a nie zmienić tekst w buforze)

+5

Z pomocy 'wrapmargin': Gdy 'textwidth' jest niezerowe, ta opcja nie jest używana. – mmoya

10

Jeśli szukasz non-Vima sposób, zawsze komendy UNIX fmt i par.

Uwagi:

  • Nie mogę wypowiedzieć się na temat Unicode, to może lub nie może zachowywać się inaczej.
  • @nelstrom już wspomniano przy użyciu par w jego webcast.

Oto, w jaki sposób wykorzystalibyśmy oba te przykłady dla Twojego przykładu.

$ echo -e 'long line is long!\nshort' > 3033423.txt 
$ cat 3033423.txt 
long line is long! 
short 
$ fmt -w 13 3033423.txt 
long line is 
long! short 
$ par 13gr 3033423.txt 
long line is 
long! short 

Aby korzystać z wewnątrz Vima:

:%! fmt -w 13 
:%! par 13gr 

Można również ustawić :formatprg do par lub FMT i zastąpić gq. Aby uzyskać więcej informacji, zadzwoń pod numer :help formatprg w Vimie.

10

Dzięki komentarzem DonaldSmith znalazłem to, jak opcja textwidth nie sformatować długą linię tekstu (ja konwersja gry z hex-to-bajt konwersje):

:%!fold -w 60

To zreformowało cały plik (który był dla mnie jedną linią) na linie o długości 60.

+0

To jest bardzo miłe.Wszystkie odpowiedzi koncentrują się na ograniczeniu szerokości linii, gdy linia jest dzielona spacjami na słowa. To rozwiązanie działa na bardzo długie słowa (sekwencje DNA). – pedrosaurio

5

Niemal zawsze używam gq w trybie wizualnym. Mówię moim uczniom, że to skrót od "Gentlemens Quarterly", magazynu dla wybrednych ludzi.

Powiązane problemy