Wiem, że istnieją sposoby automatycznego ustawiania szerokości tekstu w vimie set textwidth
(np. Problemy z układem kolumn Vima 80 ). To, czego szukam, to coś podobnego do =
(polecenie wcięcia wiersza), ale zawijanie do 80. Przypadkiem użycia jest czasem edytowanie tekstu z szerokością tekstu, a po dołączeniu linii lub usunięciu / dodaniu tekstu wychodzi ono źle opakowane.
Najlepiej byłoby, gdyby to polecenie całkowicie zreorganizowało wybrane linie i odciąło długie linie, dodając je do krótkich. Przykład:
long line is long!
short
Po uruchomieniu polecenia (przy założeniu, że wrap był 13 cols):
long line is
long! short
Jeśli nie jest to możliwe przy użyciu prawdziwego polecenia vim, być może istnieje program wiersza poleceń, który robi to, do czego mogę przesyłać dane wejściowe?
Po przeszukaniu znalazłem to odniesienie, które ma kilka dodatkowych opcji: http://www.cs.swarthmore.edu/help/vim/reformatting.html
par
. To jest fantastyczne!gq
- Kwartalnik dżentelmena . (Przepraszamy za antropomorfizującego mężczyznę, ale mnemonik działa.)Odpowiedzi:
Ustaw
textwidth
na 80 (:set textwidth=80
), przejdź na początek pliku (można to zrobić za pomocą Ctrl- Homelubgg
) i wpiszgqG
.gqG
formatuje tekst, zaczynając od bieżącej pozycji aż do końca pliku. Jeśli to możliwe, automatycznie połączy kolejne linie. Możesz umieścić pustą linię między dwiema liniami, jeśli nie chcesz, aby te dwie były ze sobą połączone.źródło
V}gq
. W ten sposób zobaczysz, co zamierzasz sformatować przed faktycznym formatowaniem.q
samo z siebie?set tw=80
zamiastset textwidth=80
oszczędzać czasset textwidth=76
linie będą się automatycznie zawijać podczas pisania. Moja skarga polega na tym, że nie ma to żadnego wpływu na edytowanie istniejących linii. AleV}gq
jest pod tym względem niezwykle przydatny.V
wchodzi w tryb selekcji wizualnej,}
wybiera do następnego podziału akapitu igq
wykonuje na nim bieżący formatyzator (lub służygw
do jawnego wywołania formatera vi). Również{
wybierze w górę. Możesz wybrać cały dokument i format,ggVGgq
chociaż może istnieje łatwiejszy sposób. Zapisz to jako makro,@
aby ułatwić. Służyvipgq
do fmt bieżącego akapitu.Kluczem jest rozwiązanie Michaela, ale najczęściej stwierdzam, że chcę sformatować resztę bieżącego akapitu; do tego zachowania użyj
gq}
.źródło
Możesz używać
gq
z dowolnymi operatorami ruchu. Na przykład, jeśli chcesz sformatować tylko do końca bieżącej linii (tj. Aby owinąć linię, na której znajduje się kursor), możesz użyćgq$
Możesz także sformatować, zaznaczając tekst w trybie wizualnym (używając `v i poruszając się), a następnie wpisując gq.
Istnieją również inne opcje wymuszania zawijania linii.
Jeśli chcesz, aby vim zawijał twoje linie podczas wstawiania w nich tekstu, zamiast czekać na koniec, aby zmienić tekst, te opcje będą przydatne:
(Nie poddawaj się śledzeniu przez
wrap
ilinebreak
, które tylko formatują tekst wyświetlany na ekranie i nie zmieniają tekstu w buforze)źródło
wrapmargin
pomocy: Gdy „szerokość tekstu” jest różna od zera, ta opcja nie jest używana.Dzięki komentarzowi DonaldSmith znalazłem to, ponieważ
textwidth
opcja nie sformatowała mojego długiego wiersza tekstu (konwertowałem grę z konwersjami szesnastkowymi na bajtowe)::%!fold -w 60
To przekształciło cały plik (który był dla mnie jedną linią) w linie o długości 60.
źródło
Jeśli szukasz sposobu innego niż Vim , zawsze znajdziesz komendy UNIX fmt i par .
Uwagi:
par
w swoim webcastie.Oto, jak wykorzystalibyśmy oba w twoim przykładzie.
Aby korzystać z wewnątrz Vima:
Możesz także ustawić
:formatprg
na par lub fmt i przesłonićgq
. Aby uzyskać więcej informacji, zadzwoń:help formatprg
do Vima.źródło
Prawie zawsze używam
gq
w trybie wizualnym. Mówię moim uczniom, że to „Gentlemens 'Quarterly”, magazyn dla wybrednych ludzi.źródło