Come posso avvolgere il testo su una certa lunghezza in Vim?


102

Parliamo di misure relative. Il mio Vim ha questo aspetto:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

Vorrei che fosse più piccolo:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

Come posso averlo? E come posso gestire l'impostazione della lunghezza di un tale blocco?


Intendi il testo a capo e non il rientro del testo?
lc.

lc: non conosco la differenza. Stavo per scrivere il wrap come mi era stato consigliato, ma non l'ho mai fatto funzionare.
Léo Léopold Hertz 준영

Risposte:


177

Puoi effettivamente fare due cose:

  1. Lascia che vim formatta (iechange) il tuo testo in modo che abbia righe più corte, inserendo interruzioni di riga
  2. Lascia le linee come sono, ma mostrale a capo

Quale vuoi?

L'opzione 1 sarebbe ottenuta impostando textwidth(ad esempio :set textwidth=30(dalla risposta di Swaarop)). Quindi puoi riformattare il testo evidenziandolo (in modalità visiva) e digitando gq. ( textwidthpuò essere abbreviato come tw, così :set tw=30.)

L'opzione 2 può essere attivata :set wrap/ disattivata eseguendo / :set nowrap. Questo avvolgerà le linee che sono troppo lunghe per la finestra.

Entrambi sono indipendenti.


33
+1 per il comando da tastiera gq dalla modalità visuale, questo è incredibilmente utile
Fire Crow

3
Cordiali saluti, questo si interrompe sugli spazi e gqgq non fa nulla a una riga come mostrato nella domanda anche se tw = 5.
dlamblin

2
@Dlamblin: corretto. Se vuoi piegare esattamente alla larghezza data, senza rispettare gli spazi bianchi, usa il foldcomando come nella risposta di fgm.
sleske

La tua opzione per non funziona per quanto vedo. wrapandrà a capo al confine della finestra, non a textwidth.
DerWeh

@DerWeh: Sì, il wrapping verrà eseguito al confine della finestra. Ho modificato per chiarire.
sleske

60

Una volta impostato 'textwidth', puoi selezionare il testo con la modalità visuale e premere gq per avvolgerlo bene (puoi anche usare Q su alcune configurazioni più vecchie / legacy).

Alcuni suggerimenti utili:

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq

3
+1, ho colpito accidentalmente gq mentre ero in vim, ho passato l'ultima mezz'ora cercando di vedere cosa avevo colpito. Questo è così utile.
user176121

gqqavvolge anche la riga corrente (invece di gqgqo gq$).
Ash l'

21

L'uso di fold (1) è una possibilità:

:%!fold -w5 

Risultato:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

1
Anche questo non rispetta gli spazi per il pieghevole
Lionel

7
@ Lionel: Sì. Per rispettare gli spazi, aggiungi l'opzione "-s" al comando di piegatura.
sleske

14
:set textwidth=30

Come lo gestisce la larghezza del testo quando non ci sono spazi, come nell'esempio del poster originale? Ho giocato e sembra che si formatta in base alla larghezza del testo solo se ci sono spazi (o presumibilmente, se la variabile breakat è impostata su qualcos'altro).
Andy

3
@ Andy textwidthnon gestirà una situazione senza spazi. Puoi scrivere la tua formatexprfunzione per farlo.
Swaroop CH

8

Se hai un testo senza spazi che vuoi spezzare ad una certa lunghezza, non è necessario usare esterno foldné scrivere il tuo formatexpr.

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

interromperà tutte le righe a 80 caratteri.


2
Questo mi ha salvato la giornata mentre resuscitavo un certificato OpenSSL. Grazie
Cengiz Can
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.