2013-10-27 12 views
5

Ich möchte vim lange Zeilen umwickeln, aber keine Wörter in der Mitte teilen. Ich fand diesen Beitrag: Word wrap in GvimWie kann ich Vim Break Zeilen nur auf Leerzeichen machen?

aber das funktioniert nicht für mich. Ich habe bereits l in Formatoptions und Linebreak aktiviert.

:set formatoptions? 
formatoptions=lnq 

Wie Sie sehen können, ist es noch Splitting Worte: http://i.imgur.com/ekJIHww.png

Nach den entsprechenden Hilfeseite Beratung, ich habe auch versucht, breakat zu \s Einstellung, aber das hat nicht funktioniert entweder.

Antwort

8

Wie Sie herausgefunden haben, wird dies mit der Option 'linebreak' (mit 'wrap' on) durchgeführt.

Wenn auf Vim wird lange Zeilen um ein Zeichen in 'breakat' und nicht auf das letzte Zeichen, das auf dem Bildschirm passt.

Und da 'breakat' standardmäßig enthält Raum und Tab und einige Satzzeichen, diese Zeilen als erwartet brechen sollten (nicht in der Mitte eines Wortes). Ich schlage vor, 'breakat' auf den Vim-Standard zurückzusetzen, falls es durch ein Plugin oder ein Mapping geändert wurde.

Oh, und nicht setzen 'list', diese Funktionen nicht mischen.

Alle zusammen jetzt:

:set nolist wrap linebreak breakat&vim 
+2

Also muss ich zwischen sichtbaren Tabs und nicht Wörter für weiche Zeilenumbruch wählen? Das ist sehr ungewöhnlich und frustrierend. – Daniel

+1

@Daniel Beschwere mich nicht! Dies war lange Zeit auf der To-Do-Liste (': h todo'). Bis jemand sich die Zeit nimmt, es zu implementieren, werden wir dieses Feature nicht haben, fürchte ich. – glts

1

Es hängt davon ab, ob Sie über hart Zeilenumbrüche sprechen - wo ein Newline-Zeichen tatsächlich in den Text eingefügt werden - oder einen weichen Zeilenumbrüche, die nur Einfluss darauf, wie die Text wird auf dem Bildschirm angezeigt.
Ich vermute, dass Sie sich auf Letzteres beziehen.
Wenn das korrekt ist, dann möchten Sie :set list (und wahrscheinlich hinzufügen set list zu Ihrem vimrc).
Umschließt die Anzeige (wieder: nur die Anzeige, nicht den tatsächlichen Text) an Wortgrenzen, verursacht list auch vim, verschiedene "unsichtbare" Zeichen anzuzeigen, wie Leerzeichen, Tabulatoren und (harte) Zeilenumbrüche, entsprechend listchars Variable (siehe :help listchars für mehr); Wenn Sie die Zeilenumbrüche an Wortgrenzen, aber nicht an unsichtbaren Zeichen vornehmen möchten, könnten Sie die Listchars vermutlich auf nichts setzen.
Ich persönlich finde, dass ich manchmal will Liste aktiviert und manchmal nicht. :set nolist ist ausgeschaltet. :set list! schaltet um. (Und nur der Vollständigkeit halber, :set list? sagt Ihnen, ob ist derzeit aktiviert oder nicht.) Das sind alle Standard-Vim-Konventionen.
Und wenn das zu viel Eingabe ist, könnten Sie eine benutzerdefinierte Tastenzuordnung in Ihrem vimrc einrichten. Aber das ist eine andere Frage.

+0

Ich habe tatsächlich schon eine Liste gesetzt: 'set listchars = tab:> -, trail: -'. Immer wenn ich ': nolist' setze, ist der Zeilenumbruch nicht mehr in der Mitte des Wortes, was mich verwirrt.Die vorherige Antwort erwähnte, dass die beiden nicht kompatibel sind, aber ich verstehe nicht warum. – Daniel

+0

Oh, richtig, mein Fehler, tut mir leid: Wortgrenzen werden ignoriert, um die Anzeige zu umhüllen, wenn 'list' * en * kann. Ich verstehe es auch nicht. – Edward