2013-10-27 27 views
5

Voglio che vim avvolga le linee lunghe, ma non le parole divise nel mezzo. Ho trovato questo post: Word wrap in GvimCome posso creare linee di interruzione vim solo su spazi bianchi?

ma questo non funziona per me. Ho già l in formatoptions e linebreak abilitato.

:set formatoptions? 
formatoptions=lnq 

Come si può vedere, è ancora parole di scissione: http://i.imgur.com/ekJIHww.png

dopo aver consultato le pagine di aiuto in materia, ho anche provato a installare breakat a \s, ma che non ha funzionato neanche.

risposta

8

Come è stato scoperto, l'operazione viene eseguita utilizzando l'opzione 'linebreak' (con 'wrap' attivo).

Se su Vim avvolgerà le linee lunghe su un carattere in 'breakat' anziché sull'ultimo carattere che si adatta allo schermo.

E poiché 'breakat' per default contiene lo spazio e Tab e alcuni caratteri di punteggiatura, questo dovrebbe rompere le linee come previsto (non nel mezzo di una parola). Suggerisco di reimpostare 'breakat' nel predefinito Vim nel caso in cui sia stato modificato da un plugin o da una mappatura.

Oh, e non impostare 'list', queste funzionalità non si combinano.

Tutti insieme ora:

:set nolist wrap linebreak breakat&vim 
+2

Quindi devo scegliere tra le schede visibili e le parole che non si rompono per le linee morbide? È molto insolito e frustrante. – Daniel

+1

@Daniel Non lamentarti di me! Questo è in realtà da molto tempo nell'elenco delle cose da fare (': h todo'). Finché qualcuno non avrà il tempo di implementarlo, non avremo questa funzionalità, temo. – glts

1

Dipende se si sta parlando di duri interruzione di linea - in cui un carattere di nuova riga è effettivamente inserito nel testo - o un morbido linebreak , che riguarda solo modo in cui il il testo viene visualizzato sullo schermo.
Sospetto che tu ti stia riferendo a quest'ultimo.
Se ciò è corretto, si desidera :set list (e probabilmente aggiungere set list al proprio vimrc).
Inoltre, il wrapping del display (di nuovo: solo il display, non il testo reale) ai confini delle parole, list fa sì che vim visualizzi vari caratteri "invisibili", come spazi, tabulazioni e (hard) newline, secondo il Variabile listchars (vedere :help listchars per ulteriori informazioni); se vuoi il soft-wrapping dei confini delle parole ma non dei personaggi invisibili, potresti presumibilmente impostare i listchar su nulla.
Personalmente trovo che a volte voglio abilitare la lista e talvolta no. :set nolist gli spegni sono spenti. :set list! commuta. (E solo per completezza, :set list? ti dice se è attualmente abilitato o meno.) Quelle sono tutte convenzioni vim standard.
E se si sta digitando troppo, è possibile impostare una mappatura dei tasti personalizzata in vimrc. Ma questa è un'altra domanda.

+0

In realtà ho già una lista impostata: 'set listchars = tab:> -, trail: -'. Ogni volta che '' set nolist', il ritorno a capo non è più nel mezzo della parola, cosa che mi imbarazza.La risposta precedente ha detto che i due non sono compatibili ma non capisco perché. – Daniel

+0

Oh, giusto, mio ​​male, mi dispiace: i confini delle parole vengono ignorati ai fini del wrapping del display se 'list' è * en * abilitato. Nemmeno io capisco. – Edward