Anzeigen einer anderen Hintergrundfarbe in Vim nach 80 Zeichen

134

Ich habe Bedenken hinsichtlich des Layouts von Vim 80-Spalten gesehen , aber die Antwort dort hebt nur den tatsächlichen Inhalt hervor, der über die 80-Zeichen-Marke hinausgeht. Ich möchte, dass ein Vim-Fenster mit mehr als 100 Spalten geöffnet wird, wobei die 80 Spalten ganz links den normalen Hintergrund und alles darüber hinaus einen etwas anderen Hintergrund verwenden. Der Hintergrund des Vim-Fensters sollte eine andere Farbe haben, nicht nur Text, der über den Punkt mit 80 Zeichen hinausgeht. Dies würde anzeigen, wie nahe ich dem 80-Zeichen-Punkt komme, ohne ihn zuerst durchgehen zu müssen.

Ich denke nicht, dass dies derzeit möglich ist, aber ich dachte, ich würde nur für den Fall fragen.

Vielleicht könnte es mit einem Plugin gemacht werden?

TextMate-Beispiel für die gewünschte Hervorhebung des rechten Randes von Vim

Wenn Sie in den allgemeinen Einstellungen von TextMate die Option "Rechten Rand markieren" auswählen, können Sie ein Beispiel für das gewünschte Vim-Verhalten anzeigen.

Hervorgehobenes Beispiel für den rechten Rand von TextMate

Doug
quelle

Antworten:

223

Wenn Sie Vim> = v7.3 haben, können Sie dies einfach zu Ihrem hinzufügen .vimrc, um 81 und höher hervorzuheben (80 ist also Ihre letzte gültige Spalte):

let &colorcolumn=join(range(81,999),",")

Wenn Sie keine Hervorhebung sehen, ist möglicherweise keine ColorColumnHervorhebungsfarbe festgelegt. Fügen Sie dies hinzu (passen Sie es Ihren Vorlieben an):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Jetzt möchte ich Spalte 80 sowie 120 und höher hervorheben, daher habe ich separate "Warn" - und "Gefahren" -Markierungen. Sie können das so machen:

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

Beispiel

Hier ist ein Screenshot von GVim, wie er meine bearbeitet .vimrc.

GVim bearbeitet meine .vimrc

Ich benutze Ubuntu Mono 11 Schriftart und das Molokai Farbschema. Sie finden meine vim-Konfiguration und alle meine Punktedateien auf GitHub.

Justin Force
quelle
3
Die Farbspalte ist auf 256 Definitionen pro :help colorcolumn... beschränkt. Außerdem scheint meine Einstellung bei Verwendung Ihrer Join-Technik etwas abgeschnitten zu sein, obwohl ich nicht in der Lage bin, die Quelle von vim zu durchsuchen, um herauszufinden, wie lang diese ist. Außerdem analysiert vim den Wert dieser Einstellung jedes Mal als Zeichenfolge, wenn sie in ein Fenster eintritt, einen Puffer initialisiert usw. Dies ist also eine teure Methode, um das gewünschte Ergebnis zu erzielen.
cptstubing06
15
Ihre Dotfiles sind heiß.
obfk
1
Vielen Dank für die Veröffentlichung, war genau das, wonach ich gesucht habe! Nur noch eine Frage: Gibt es eine Möglichkeit, diese Regeln nicht auf einen bestimmten Dateityp (.md) festzulegen?
David Dias
1
@ DavidDias Sicher! Sie können etwas tun, autocmd FileType markdown let &colorcolumn=""um es vollständig zu deaktivieren.
Justin Force
1
aktualisierter Link zu vim config
reergymerej
78

Markieren Sie die Spalte 81

:set textwidth=80
:set colorcolumn=+1

Sie können auch etwas Styling machen:

:hi ColorColumn guibg=#2d2d2d ctermbg=246
Andrew
quelle
2
Dies und es ist auch möglich, dass bis zu 256 Spalten hervorgehoben werden, aber leider ist eine Liste von Spalten zum Hervorheben erforderlich, und es gibt keine Abkürzung dafür. Sie müssten also so etwas wie :set colorcolumn=+1,+2,+3,+4,+5,+6usw. tun, möglicherweise bis zu +256einer beliebigen Breite Sie denken, Sie möchten Ihren rechten Rand. Dadurch werden jedoch nur Zeilen hervorgehoben, die im Puffer vorhanden sind, nicht alle Zeilen im Fenster.
mkomitee
1
@Dyslexic Tangent: Warum nicht stattdessen die ersten 80 Spalten hervorheben?
Brice
1
Daran hatte ich nicht gedacht. Stellen Sie Ihren Hintergrund auf die Farbe ein, die Sie zum Hervorheben von> 80 Spalten verwenden möchten, und legen Sie die Farbspalte für alle Spalten von 1 bis 80 fest. Legen Sie die Hervorhebungsgruppe für die Farbspalte auf die Farbe fest, die Ihr normaler Hintergrund haben soll.
mkomitee
2
Eine Frage, obwohl ich die Farbe durch Eingabe richtig einstellen kann, :hi colorcolumn ...scheint sie nicht zu funktionieren, wenn ich sie in meine .vimrc einfüge. Wissen Sie, wie das geht?
Robbrit
Ich sehe das gleiche Problem wie bei robbrit - Wenn ich den Befehl "Hervorheben" im Ex-Modus ausführe, sieht es gut aus, aber wenn ich ihn in meiner vimrc-Datei habe, zerstört er mein Farbschema ...
Bennidhamma
16

Die im obigen Kommentar vorgeschlagene Lösung. Markieren Sie zuerst Ihren Hintergrund und dann das ColorColumn-Schwarz als Overlay. Stellen Sie Ihre Farbspalte auf die Zeilen 1-80 ein.

hi Normal guibg=#32322f ctermbg=236
hi NonText guibg=#32322f ctermbg=236
hi ColorColumn guibg=#000000 ctermbg=0
let &colorcolumn=join(range(1,80),",")
Conner
quelle
1
Das ist einfach und doch brillant. Vielen Dank!
Luftangriff
8

Versuchen:

:/\%>80v./+

Es werden +80 Zeichen als Fehler markiert

GoTTimw
quelle
Zur Not so schlau. Ich mag es, weil es sich an Themenänderungen anpasst. Vielen Dank.
Benjamin
0

Ich glaube nicht, dass es möglich ist, das zu haben, was Sie wollen, aber ich folge dieser Frage, da ich selbst an so etwas interessiert bin.

Vielleicht sage ich das Offensichtliche, aber Sie könnten die Highligth in den 70. + Spalten einrichten, um einen Hinweis darauf zu erhalten, wie nahe Sie der 80. Spalte kommen.

René Nyffenegger
quelle
0

Für diejenigen, die onedark.vim wie mich verwenden und eine von Conner veröffentlichte Lösung wünschen, habe ich diese Zeilen zu meiner vimrc-Datei hinzugefügt

let &colorcolumn=join(range(1,80),",")
let g:onedark_color_overrides = {
  \ "black": {"gui": "#2C323C", "cterm": "236", "cterm16": "8"},
  \ "cursor_grey": {"gui": "#282C34", "cterm": "235", "cterm16": "0"}
  \ }

Ich habe gerade die beiden Werte vertauscht und sie aus dem Quellcode von onedark übernommen

yujinyuz
quelle