
Ich möchte zusätzliche Leerzeichen und Spalten mit fester Länge (z. B. 80 Zeichen in einer Zeile) mit VIM hervorheben
.vimrc
Ich habe in meiner Datei zwei vimrc-Regeln erstellt
highlight ExtraWhitespacea ctermbg=darkred guibg=#382424
match ExtraWhitespacea /\s\+$/
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
Das Problem besteht nun darin, dass diese Regeln bei getrennter Anwendung genau wie gewünscht ausgeführt werden, zusammen jedoch nicht.
Übersehe ich hier etwas? Wie debugge ich das?
Antwort1
Das Problem ist, dass jeder :match
Befehl das Muster des vorherigen überschreibt; sie sind nicht kumulativ! Aus diesem Grund gibt es :2match
zwei :3match
Varianten. Verwenden Sie eine davon:
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
highlight OverLength ctermbg=red guibg=#525252
2match OverLength /\%81v.\+/
Zusätzliche Varianten können mit der Vimscript-Funktion erstellt werden matchadd()
.
Anmerkungen
- Seit Vim 7.3 gibt es eine integrierte
'colorcolumn'
Option, die das Hervorheben von Spalten ermöglicht. - Ihr Setup
~/.vimrc
funktioniert nur für das allererste Fenster; d. h. es:split
wird ein Fenster erstellt, das diese Hervorhebungen nicht hat. Sie können das über Autocmds (oder mithilfe der'colorcolumn'
Option) beheben. - Es gibt robustere und ausgefeiltere Lösungen zum Hervorheben nachstehender Leerzeichen, zum Beispiel meinePlugin „ShowTrailingWhitespace“. (Die Plugin-Seite enthält Links zu alternativen Plugins.)
Antwort2
Möglicherweise hat Ihr Farbschema Ihre Konfiguration überschrieben. Sie können diese Zeilen am Ende hinzufügen, um .vimrc
ein Überschreiben zu verhindern, oder einfach diese Zeilen zu Ihrem hinzufügen .vimrc
:
" Highlight trailing white spaces
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
" Highlight long lines
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
autocmd BufWinEnter * match OverLength /\%81v.\+/
autocmd InsertEnter * match OverLength /\%81v.\+/
autocmd InsertLeave * match OverLength /\%81v.\+/
autocmd BufWinLeave * call clearmatches()