2009-08-13 7 views
140

Załóżmy, że mam bardzo długą linię w edytorze VIM (powiedzmy około 300 znaków). W jaki sposób mogę podzielić to na wiele linii, aby granice słów z grubsza przekroczyły 80 znaków?W VIM, jak mogę podzielić jedną naprawdę długą linię na wiele linii?

Przykład:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line 

do

This is a really long line 
This is a really long line 
This is a really long line 
This is a really long line 
This is a really long line 
This is a ... 

Odpowiedz

213

Vim robi to bardzo łatwe (linie przerwy w granicach słowo).

gq{motion} % format the line that {motion} moves over 
{Visual}gq % format the visually selected area 
gqq  % format the current line 
... 

sugeruję sprawdzić :help gq i :help gw.

Ustawienie szerokości tekstu (tw) spowoduje automatyczne łamanie wiersza po przekroczeniu podczas pisania. Jest on również używany w gq, ale jeśli jest wyłączony, to gq łamie rozmiar okna lub 79, w zależności od tego, który jest pierwszy.

:set tw=80 

Po ustawieniu opcji formatowania w celu uwzględnienia szerokości tekstu vim zostanie automatycznie złamany przy ustawieniu Tw.

:set fo+=t 
+5

Tak dla twojej przypadku' komenda gq' byłoby '' (wydostać się z trybu Insert/Replace/etc), następnie 'gq80l' – MidnightLightning

+6

Jest to przeciwieństwo Ctrl + j (łączy wiele linii w jeden) –

+8

Vim nigdy nie przestaje mnie zadziwiać To jest czyste złoto – Jondlm

1

Jako szybkie i paskudne, może spróbować z poniższą mapą

map q 080lwbels<CR><ESC> 

który mówi:

  • rozpocząć 0TH położenie linii,
  • przejście na 80-char w prawo,
  • przejść do początku następnego słowa,
  • wrócić do poprzedniego słowa,
  • iść do końca bieżącego słowa,
  • przejdź po jednym znaku, a następnie
  • podstaw dla CR.

Następnie naciśnięcie q i CR przerwie linię na kawałki na granicy wyrazów.

12

To naprawdę nie jest związane z VIM, ale można użyć FMT programu jak w

$ fmt myfile 
+34

:.% FMT% "Może zrobić to vim związane :) –

+2

Przydatne do VI, choć wolałbym gqq na vim – WhyNotHugo

75

Najpierw ustawić vim tak, że rozumie, że chcesz 80 znaków:

:set tw=80 

Następnie hilight linię:

V 

i uczynić vim sformatować go:

gq 
+0

ładnie i prosto. Pozdrawiam – ropata

4

Potrzebowałem sformatować cały plik szczura jej niż jednej linii.Jak Wernsey zaznacza, mogłem użyć „FMT”, ale następująca sekwencja w vim wystarczyły także (pożyczki z różnymi odpowiedziami tutaj):

<ESC> 
:setl tw=80 fo=t 
1GVGgq 
5

Jeśli jesteś na * nix prawdopodobnie masz fold dostępny.

Wybierz obszar, który chcesz za pomocą v, można przełamać na przestrzeni na szerokość 80 przy użyciu:

!fold --spaces --width=80

To esentially taka sama jak przy użyciu gq.

Jednakże, jeśli chcesz po prostu złamać w charakterze 80, a nie ograniczać się do spacji można użyć:

!fold --width=80

Jeśli chcesz go z jednym naciśnięciem klawisza wystarczy ustawić mapowanie - Użyłem

vmap <f1> !fold --width=80<CR>

+0

To jest odpowiedź, która działa dla długich ciągów nie oddzielonych białymi znakami. W systemie MacOS może być konieczne użycie gfold zamiast spasowania. –

+0

na Mac OS, musiałem zrobić! Fold -w 80 – user674669

2

Aby podzielić długie linie kompletnego dokumentu bez wyjmowania już obecne podziały wiersza, zastosowanie:

:set formatoptions+=w 
:set tw=80 
gggqG 
2

Dla stałych linii tekstu podświetlić obszar za pomocą przycisku V w trybie normalnym, a następnie naciśnij

:s/\v(.{80})/\1\r/g 

Spowoduje to dodanie nowego wiersza na końcu każdego 80. charakteru.

:s/  replaces within the current select 
\v  uses regular expressions 
(.{80}) selects 80 characters & placed them into group one 
\1\r  replaces group one with group one and a newline 
+0

To jedyne rozwiązanie, które działało dla długiego łańcucha base64. – jviotti

Powiązane problemy