Come fermare l'interruzione di linea in vim


257

Mi piace che le linee lunghe siano visualizzate su più di una linea terminale; Non mi piace che vim inserisca nuove righe nel mio testo reale. Quale parte di .vimrc dovrei cambiare?


7
Per chiarezza: ti piace che le linee lunghe siano visualizzate su più di una linea terminale; non ti piace che vim inserisca nuove righe nel tuo testo reale? Se è così, allora :set nowrapè l'opposto di quello che vuoi :(.
Andrew Aylett,

@Andrew: sì, il tuo riassunto è esattamente quello che voglio
Haiyuan Zhang,

Risposte:


304

Uso

:set wrap

Per avvolgere visivamente le linee, ovvero la riga è ancora una riga di testo, ma Vim la visualizza su più righe.

Uso

:set nowrap

Per visualizzare le linee lunghe come una sola linea (cioè devi scorrere in orizzontale per vedere l'intera linea).


3
Grazie per i consigli ragazzi. Sono andato con: set nowrap e: set textwidth = 0 funziona alla grande
Robert Beltran,

5
Quando scrivo voglio ancora vedere il limite "visivo" di 80 colonne e non voglio che vim aggiunga automaticamente il feed di riga quando scrivo dopo l'80a colonna. Come lo faccio?
Olivier Pons,

7
Questa è esattamente la risposta che stavo cercando, ma non è la risposta alla domanda di OP. È un po 'fuorviante avere questa come risposta principale. Non so come risolvere questa situazione. Vorrei solo modificare la tua risposta per rispondere anche alla domanda originale. Ma esiste già una risposta adeguata che è quasi altrettanto votata. Quindi ho appena votato per cambiare le due risposte.
Daniel Darabos,

3
Questa è esattamente la risposta che non stavo cercando, e non è la risposta alla domanda del PO.
peeol,

Questa non è una risposta alla domanda.

194

Mi piace che le linee lunghe siano visualizzate su più di una linea terminale

Questo tipo di avvolgimento di linee visivo / virtuale è abilitato con l' wrapopzione finestra:

set wrap

Non mi piace che vim inserisca nuove righe nel mio testo reale.

Per disattivare il ritorno a capo fisico, deselezionare entrambe le opzioni textwidthe wrapmarginbuffer:

set textwidth=0 wrapmargin=0

1
Grazie! set textwidth=0 wrapmargin=0funziona ma se lo inserisco .vimrc, non ha alcun effetto, ad esempio, per i file di testo semplice. Come faccio a scoprire ed eliminare la sovrascrittura?
qubodup,

7
@qubodup Puoi verificare se qualcosa sta sovrascrivendo le tue impostazioni .vimrc aprendo un file in cui vedi il problema e inserendolo :verbose set textwidth? wrapmargin?. Questo ti dirà i loro valori attuali e anche dove sono stati impostati. È possibile che tu abbia un plugin che li sovrascrive. In tal caso, è possibile disinstallare quel plug-in o provare a sovrascrivere le impostazioni del plug-in in un secondo momento nel proprio runtimepath (ad esempio:) ~/.vim/aftero con il proprio autocommand. L'approccio corretto dipenderà da dove / come viene ripristinato.
Laurence Gonsalves,

set wraped set linebreakè quello che ha fatto per me.
Ilia Choly,

36

Non sono sicuro di aver capito completamente, ma potresti cercare l'impostazione di configurazione "formatoptions". Prova qualcosa del genere :set formatoptions-=t. L' topzione inserirà le interruzioni di riga per avvolgere il testo alla larghezza impostata da textwidth. Puoi anche inserire questo comando nel tuo .vimrc, basta rimuovere i due punti ( :).


3
Questa mi sembra l'opzione migliore per rispondere al desiderio del PO. Mi piace il fatto che VIM mostri ancora una linea verticale in tw.
mitchus,

3
Questa è l'unica risposta che risponde effettivamente alla domanda di OP. La maggior parte degli altri fa il contrario. OP vuole ancora che vengano visualizzate le linee lunghe, ma per vim non inserire automaticamente le interruzioni di riga.
sebastian,

33

Usa :set nowrap.. funziona come un fascino!


10
Solo che fa l'opposto di ciò che l'OP definisce come comportamento desiderato ...: P
Morlock

5
@Morlock, ma risponde alla domanda che ho avuto e google mi ha portato qui :)
Ben Usman

c'è qualche scorciatoia da tastiera per questo?
Pini Cheyni,

@PiniCheyni, aggiungi al tuo file .vimrc: nnoremap <Cw>: imposta invwrap <CR> Quindi puoi usare Ctrl + W per attivare il wrapping del testo.
riapre

30

:set tw=0

VIM non inserirà automaticamente le interruzioni di riga, ma manterrà il ritorno a capo.


3
Voglio esattamente il contrario ... quando scrivo voglio ancora vedere il limite "visivo" di 80 colonne e non voglio che vim aggiunga automaticamente il feed di riga quando scrivo dopo l'ottava colonna. Come lo faccio?
Olivier Pons,

16

Potresti trovare set lbrutile; con set wrapsu questo avvolgerà ma tagliando solo la linea su uno spazio bianco e non nel mezzo di una parola.

per esempio

without lbr the li
ne can be split on
a word

e

with lbr on the
line will be
split on 
whitespace only

Si consiglia vivamente di evitare le opzioni di abbreviazione perché in futuro dovrai fare una ricerca sul sistema di aiuto per capire cosa hai risolto, quindi usa set nolinebreakinvece diset lbr
SergioAraujo

12

set formatoptions-=t Mantiene la larghezza del testo visiva ma non aggiunge una nuova riga in modalità inserimento.


4

È strano che un'impostazione così semplice richiederebbe questa quantità di "hocus-pocus" per funzionare.

Per rispondere alla tua domanda ora, per me sembrava funzionare con la combinazione di quanto segue:

:set wrap linebreak nolist

(questo sembra impedire che le linee esistenti si spezzino, basta avvolgerle.)

E

set formatoptions=l

(questo impedisce che le linee nuove / modificate si rompano, mentre + = non lo fa per me poiché altre impostazioni / plugin sembrano trovare spazio e aggiungere le proprie opzioni che sovrascrivono le mie.)


4

Se, come me, stai eseguendo gVim su Windows, il tuo file .vimrc potrebbe essere di provenienza da un altro file Vimscript 'esempio' che imposta automaticamente textwidth(nel mio caso 78) per i file di testo.

La mia risposta a una domanda simile a questa - Come fermare gVim a capo del testo nella colonna 80 - sul sito Vi e Vim Stack Exchange :

Nel mio caso, il commento di Vitor mi ha suggerito di eseguire quanto segue:

:verbose set tw?

In questo modo mi ha dato il seguente risultato:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

In vimrc_example.vim , ho trovato le righe pertinenti:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

E ho scoperto che il mio .vimrc sta acquistando quel file:

source $VIMRUNTIME/vimrc_example.vim

Nel mio caso, non voglio textwidthessere impostato per nessun file, quindi ho appena commentato la riga pertinente in vimrc_example.vim .


1
Invece di modificare il file vimrc_example.vim, ho appena aggiunto autocmd FileType text setlocal textwidth=0il file vimrc e questo ha risolto il problema quando altre soluzioni proposte non lo hanno fatto.
Grandammiraglio

3

È corretto che set nowrap ti permetterà di incollare in una lunga riga senza che vi / vim aggiunga nuove righe, ma poi la linea non viene visivamente chiusa per una facile lettura. È invece solo una lunga fila che devi scorrere.

Per fare in modo che la riga si sovrapponga visivamente ma non siano inseriti caratteri di nuova riga, impostare wrap (che è probabilmente predefinito quindi non è necessario impostarlo) e impostare textwidth = 0 .

Su alcuni sistemi, l'impostazione di textwidth = 0 è predefinita. Se non lo trovi, aggiungi set textwidth = 0 al tuo file .exrc in modo che diventi il ​​tuo utente predefinito per tutte le sessioni vi / vim.

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.