W Vimie, jak podzielić jedną naprawdę długą linię na wiele linii?

Powiedzmy, że mam super długą linię w edytorze VIM (powiedzmy około 300 + znaków). Jak podzielić to na wiele linii, aby granice słowa z grubsza łamały się na 80 znaków?

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 ...
 148
vim
Author: Jordan Parmer, 2009-08-13

8 answers

Vim robi to bardzo łatwo(łamanie linii w granicach słów).

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

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

Również ustawienie textwidth (tw) spowoduje automatyczne łamanie linii po przekroczeniu podczas pisania. Jest również używany w gq, choć jeśli wyłączony gq łamie rozmiar okna lub 79 w zależności od tego, który jest pierwszy.

:set tw=80

Ustawiając opcje formatu na szerokość tekstu, vim automatycznie pęknie przy ustawieniu tw.

:set fo+=t
 224
Author: he_the_great,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-26 16:35:07

Najpierw ustaw swój vim tak, aby zrozumiał, że chcesz 80 znaków:

:set tw=80

Następnie, hilight linii:

V

I spraw, aby vim go sformatował:

gq
 77
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-13 14:37:47

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

$ fmt myfile
 15
Author: Wernsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-13 14:16:01

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

Wybierz region, którego chcesz użyć v, a następnie możesz łamać spacje na szerokości 80 używając:

!fold --spaces --width=80

Jest to esencjalnie to samo co użycie gq.

Jeśli jednak chcesz po prostu złamać znak 80 i nie ograniczać się do spacji, możesz użyć:

!fold --width=80

Jeśli chcesz to z jednym naciśnięciem klawisza po prostu ustaw mapowanie-użyłem

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

 5
Author: Michael Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-07 05:53:39

Musiałem sformatować cały plik,a nie jedną linię. Jak podkreśla Wernsey, mogłem użyć 'fmt', ale następująca sekwencja w vim również zadziałała (zapożyczenie z różnych odpowiedzi tutaj): {]}

<ESC>
:setl tw=80 fo=t
1GVGgq
 4
Author: John Rix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-05 16:59:06

Dla stałych linii tekstu zaznacz obszar za pomocą v w trybie normalnym, a następnie naciśnij

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

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

: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
 4
Author: smokedice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-12 14:59:27

Aby podzielić długie wiersze w całym dokumencie bez usuwania już obecnych podziałów wierszy, użyj:

:set formatoptions+=w
:set tw=80
gggqG
 2
Author: Olivier Faucheux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-28 07:35:14

Jako szybki i paskudny, może wypróbuj następującą mapę:

map q 080lwbels<CR><ESC>

Który mówi:

  • start a 0TH position of line,
  • przesuń na 80 znak w prawo,
  • przejdź do początku następnego słowa,
  • wróć do poprzedniego słowa,
  • przejdź do końca bieżącego słowa,
  • jeden znak w prawo i
  • zastąp CR za ten znak.

Następnie naciśnięcie q i CR spowoduje rozbicie linii na kawałki na granicy słowa.

 1
Author: Rob Wells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-28 17:13:36