2009-08-13 16 views
140

Dire che ho una linea molto lunga nell'editor VIM (diciamo circa 300+ caratteri). Come potrei suddividerlo in più righe in modo che i limiti delle parole si spezzino approssimativamente a 80 caratteri?In VIM, come posso suddividere una linea molto lunga in più righe?

Esempio:

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 

a

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 ... 

risposta

213

Vim fa molto facile (linee di interruzione a confini di parola).

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

Io suggerirei di controllare :help gq e :help gw.

Inoltre, l'impostazione della larghezza del testo (tw) consente un'interruzione automatica della linea quando viene superata durante la digitazione. Viene utilizzato anche nello gq, sebbene se disabilitato lo gq si interrompa alla dimensione della finestra o 79 a seconda di quale viene prima.

:set tw=80 

Impostando le opzioni di formato per includere la larghezza del testo vim si interromperà automaticamente all'impostazione tw.

:set fo+=t 
+5

Quindi per il vostro caso, il comando' gq' sarebbe '' (uscire dalla modalità Inserisci/Sostituisci/etc), quindi 'gq80l' – MidnightLightning

+6

Questo è l'opposto di Ctrl + j (combina più righe in uno). –

+8

Vim non smette mai di stupirmi.Questo è oro puro – Jondlm

1

Come un rapido e brutto, magari provare la seguente mappa:

map q 080lwbels<CR><ESC> 

che dice:

  • avviare una posizione 0e di linea,
  • mossa per char 80 ° a destra,
  • raggiungere l'inizio della parola successiva,
  • tornare alla parola precedente,
  • Vai alla fine della parola corrente,
  • go one char right, e
  • sostituire un CR per quel carattere.

Quindi premendo q e CR si romperà la linea in blocchi sul limite della parola.

12

Questo non è proprio legato alla VIM, ma è possibile utilizzare il programma FMT come in

$ fmt myfile 
+34

:!.% Fmt% "Può rendere Vim legato :) –

+2

Utile per VI, anche se io preferirei gqq su vim – WhyNotHugo

75

Prima impostare il vostro vim in modo che capisca che si desidera 80 caratteri:

:set tw=80 

poi, Hilight la linea:

V 

e rendere vim riformattarlo:

gq 
+0

bello e semplice. evviva – ropata

4

Avevo bisogno di riformattare un intero file ratto lei di una linea.Come Wernsey sottolinea, avrei potuto usare 'fmt', ma la seguente sequenza in vim ha fatto il trucco anche (prestito dalle varie risposte qui):

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

Se siete su * nix probabilmente avete fold a disposizione.

selezionare l'area che si desidera utilizzare v, allora si può rompere in spazi alla larghezza di 80 utilizzando:

!fold --spaces --width=80

Questo è esentially lo stesso che utilizza gq.

Tuttavia, se si desidera solo rompere a carattere 80 e non essere limitato a spazi bianchi è possibile utilizzare:

!fold --width=80

Se si desidera con una battitura è sufficiente impostare una mappatura - ho usato

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

+0

Questa è la risposta che funziona per le stringhe lunghe non separate da spazi bianchi. Su macOS potresti aver bisogno di usare gfold invece di fold, però. –

+0

su mac os, dovevo farlo! Fold -w 80 – user674669

2

Per dividere linee lunghe nel documento completo senza rimuovere già presenti interruzioni di riga, uso:

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

Per linee continue di testo evidenziare l'area utilizzando v in modalità normale, premere

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

Verrà aggiunta una nuova riga alla fine di ogni carattere 80th.

: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

Questa è l'unica soluzione che ha funzionato per una lunga stringa base64. – jviotti

Problemi correlati