Nach dem Hinzufügen dieser Zeilen zur .vimrc funktionierte dies jedoch nicht.
Der Grund dafür ist, dass Vim beim Festlegen der 'syntax'
Option vorhandene Syntaxelemente löscht . Dies geschieht, weil das Beibehalten der alten Syntaxelemente zu seltsamen Situationen führen würde. wenn Sie einen Puffer haben , die hat syntax=foo
und verwenden set syntax=bar
dann werden Sie mit einem Puffer am Ende der Syntax für die Hervorhebung hat beide foo
und bar
.
Wenn Vim vimrc
gestartet wird, wird es einmal geladen (beim Start), aber jedes Mal, wenn die Optionen filetype
oder syntax
festgelegt werden, werden die Dateityp- und Syntaxdateien geladen , wodurch die in Ihrem vimrc festgelegten Werte zurückgesetzt werden.
Selbst wenn es nicht zurückgesetzt würde, wäre es keine gute Idee, es einfach zu Ihrem vimrc hinzuzufügen, da es für alle Puffer gelten würde und nicht nur für Puffer mit syntax=c
.
Der folgende Text setzt Vim auf einem Unix-y-System voraus, funktioniert jedoch auch für Neovim- und Windows-Benutzer:
- Neovim Benutzer sollten ersetzen
~/.vim/
mit ~/.config/nvim/
.
- Windows - Anwender sollten ersetzen
~/.vim/
mit %USERPROFILE%\vimfiles\
.
Überschreiben einer gesamten Datei
Der einfachste Weg, etwas zu ändern, besteht darin, es einfach zu überschreiben . Erstellen Sie dazu eine Datei in ~/.vim/<file>.vim
.
<file.vim>
ist der Pfad relativ zu $VIMRUNTIME
(einschließlich Unterverzeichnissen). In Ihrem Beispiel sollte es sein syntax/c.vim
. Es wird anstelle der Datei in geladen $VIMRUNTIME
.
Das Ergebnis ist, dass es einfacher ist, Änderungen vorzunehmen - das Ändern bestehender Syntaxdateien kann manchmal etwas schwierig sein. Der Nachteil ist, dass Sie keine zukünftigen Updates für die systemweite Datei erhalten.
Ich verwende dies oft als Ausgangspunkt, um mit Syntaxdateien zu experimentieren und später meine lokalen Änderungen mit einer der unten beschriebenen Methoden an einem lokalen Zusatz zu extrahieren.
Lokale Ergänzungen
Es gibt zwei Möglichkeiten, Syntaxdateien lokale Ergänzungen hinzuzufügen: Sie sind funktional identisch und Sie können die von Ihnen bevorzugte Methode verwenden.
Syntax
autocmd
Verwenden Sie das Syntax
autocmd:
augroup ft_c
autocmd!
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
autocmd Syntax c hi cFunction gui=NONE guifg=#B5A1FF
augroup end
Beachten Sie, dass das Verketten mehrerer Befehle |
hier problematisch ist, da sie tendenziell als Teil des :syn
Befehls interpretiert werden , weshalb ich sie mehrmals wiederholt habe autocmd Syntax c
. Eine Alternative wäre die Verwendung einer Funktion:
fun s:c()
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
endfun
augroup ft_c
autocmd!
autocmd Syntax c call s:c()
augroup end
Der Vorteil ist, dass alle Änderungen in einer einzigen Datei enthalten sein können. Der Nachteil ist, dass es ein bisschen hässlich ist, besonders wenn Sie viele Änderungen haben.
nach Verzeichnis
Verwenden Sie das Nachverzeichnis : ~/.vim/after/<file>.vim
.
Dies wird nach <file>.vim
has geladen , wobei <file.vim>
der Pfad relativ zu $VIMRUNTIME
(einschließlich Unterverzeichnissen) ist. In Ihrem Beispiel sollte es sein syntax/c.vim
.
Siehe auch :help after-directory
.
Der Vorteil ist, dass es etwas besser lesbar ist als das Autocmd, insbesondere wenn Sie viele Änderungen haben. Der Nachteil ist, dass Sie eine zusätzliche Datei kopieren müssen, wenn Sie Ihr Vim-Setup auf verschiedene Computer spiegeln möchten (dies ist ein wichtiger Grund, warum viele Benutzer ihre Vim-Dateien in einem GitHub-Repo aufbewahren, damit sie problemlos auf mehreren Computern gespiegelt werden können ).
~/.vim/after/syntax/c.vim
stattdessen hinzuzufügen .