Wie kann ich ein Lineal für eine bestimmte Spalte einrichten?

50

Wenn ich in verschiedenen Sprachen codiere, muss ich meine Zeilen in der Regel auf eine bestimmte Länge beschränken (normalerweise 79 oder 80 Zeichen).

Ich habe dies in anderen Editoren durch die Verwendung eines Lineals (durchgezogene Linie in der Spalte) oder durch Ändern der Textfarbe als Hinweis darauf gesehen, dass der Text übergangen ist.

Wie kann ich mir von Vim anzeigen lassen, wenn ich mich 79 Zeichen in einer einzelnen Zeile nähere oder mehr als diese Zeichen überschreite?

Kevin Brown
quelle

Antworten:

64

Mit der Option :set colorcolumn( :set cckurz), die nur in Vim 7.3 oder höher verfügbar ist, können Sie ein Lineal in einer bestimmten Zeile anzeigen .

set colorcolumn=80

Dadurch wird die Hintergrundfarbe dieser Spalte auf Rot gesetzt und Sie erhalten ein visuelles Lineal, mit dem Sie arbeiten können.

Die Standardfarbspalte ist auf 80 eingestellt

Wenn Sie eine andere Farbe , anders als Rot verwenden möchten (was wirklich steht), können Sie die Farbe ändern , indem Sie die Einstellung highlightfür ColorColumn.

highlight ColorColumn ctermbg=0 guibg=lightgrey

Kundengebundene Farbe für die Spalte

Sie können die Farbe für Terminalversionen von Vim mithilfe des ctermArguments und für GUI-Versionen von Vim mithilfe des guibgArguments festlegen . Dies 0ist der Wert des ASCII-Escape-Codes für Schwarz, der beim Aufhellen grau ist (standardmäßig). Der Wert lightgreywird für GUI-Versionen von Vim wie gVim verwendet, um die Hintergrundfarbe in ein hellgraues zu ändern.

Kevin Brown
quelle
10
Sie können sogar mehrere durch Kommas getrennte Farbspalten verwenden!
200_success
4
Wenn Sie dies mit join & range kombinieren, können Sie eine Reihe von Spalten mit sehr wenig Code erstellen. Mein .vimrc hat:execute "set colorcolumn=" . join(range(81,335), ',')
Cody Poll
19

Als Ergänzung zu Kevins Antwort können Sie mehrere Farbspalten verwenden. Wenn ich programmiere, habe ich manchmal ein "weiches" Limit bei 80 Spalten und ein "hartes" Limit bei 120 Spalten. Ich möchte also eine Zeile bei 80 und dann jede Spalte nach 120 einfärben.

Ich mache das mit

let &colorcolumn="80,".join(range(120,999),",")

Natürlich kann dies leicht an andere Vorlieben angepasst werden.

Davidlowryduda
quelle
14

Vim 7.3 bringt die colorcolumnOption, wie in anderen Antworten sehr gut ausgeführt.

Wenn Sie jedoch aus irgendeinem Grund nicht über Version 7.3 verfügen, können Sie mit der matchFunktionalität von vim trotzdem visuell anzeigen, dass Sie eine bestimmte Spaltenanzahl überschreiten (siehe :help matchfür Details).

Im Wesentlichen können Sie mit den Übereinstimmungsbefehlen dauerhafte Hervorhebungen für Text erstellen, der mit einem bestimmten regulären Ausdruck übereinstimmt. :match ColorColumn "\%80v."markiert Text in Spalte 80 mit der Gruppe "ColorColumn". Sie können natürlich jede Hervorhebungsgruppe und jeden Spaltenwert ersetzen. Wenn Sie eine starke visuelle Anzeige wünschen, "\%>79v.\+"hebt der Ausdruck Spalte 80 und höher hervor.

( \%80vbedeutet "Übereinstimmung in virtueller Spalte 80" und \%>79vbedeutet "Übereinstimmung nach virtueller Spalte 79"; :help /\%cweitere Informationen finden Sie hier.)

Dieser Ansatz wird jedoch nur hervorgehoben, wenn in den angegebenen Spalten tatsächliche Zeichen vorhanden sind, wodurch die visuelle Konsistenz geringer ist als bei colorcolumn.


quelle
4
Persönlich finde ich den weniger konsistenten Ansatz von matches besser, da er nur die Zeilen hervorhebt, bei denen ich das 80-Spalten-Limit überschreite, anstatt eine (für mich) aufdringliche große rote Linie auf der rechten Seite des Bildschirms anzuzeigen. Daher verwende ich in meinem vimrc für Python call matchadd('ColorColumn', '\(\%80v\|\%100v\)')(80 und 100 sind die empfohlenen Längen in PEP 8)
Jalanb