Ich habe gvim sowohl auf Fedora als auch auf Win7 installiert. Ich habe festgestellt, dass sowohl vim als auch gvim unter Fedora den Funktionsnamen im C-Code nicht hervorgehoben haben, während gvim unter win7 ihn hervorgehoben hat.
Ich fand, dass auf win7 vim73/syntax/c.vim
die zusätzlichen Zeilen am Ende stehen:
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
Wenn ich diese Zeilen zu c.vim
Fedora hinzufüge, kann gvim auch den Funktionsnamen hervorheben.
Um die Portabilität aufrechtzuerhalten, möchte ich nur das ändern .vimrc
, um den Funktionsnamen hervorzuheben. Nach dem Hinzufügen dieser Zeilen in das .vimrc
hat es jedoch nicht funktioniert.
Kann mir jemand helfen? Ich habe eine Suche durchgeführt und es gibt viele Lösungen, um die Funktionsnamen in vim hervorzuheben. Aber ich bin nur neugierig, wie diese Zeilen funktionieren .vimrc
. Vielen Dank!
quelle
~/.vim/after/syntax/c.vim
stattdessen hinzuzufügen ..vimrc
?autocmd BufEnter *.c hl ...
Sie müssten wahrscheinlich so etwas verwenden , aber Sie sollten es behaltenafter/syntax/c.vim
. Jede moderne Version von Vim wird das.vim/after/
Verzeichnis verstehen . Unter Windows wäre der Pfad sovimfiles/after/...
, dass die Portabilität kein großes Problem darstellen sollte (insbesondere, wenn Sie Plugins verwenden).Antworten:
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 hatsyntax=foo
und verwendenset syntax=bar
dann werden Sie mit einem Puffer am Ende der Syntax für die Hervorhebung hat beidefoo
undbar
.Wenn Vim
vimrc
gestartet wird, wird es einmal geladen (beim Start), aber jedes Mal, wenn die Optionenfiletype
odersyntax
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:
~/.vim/
mit~/.config/nvim/
.~/.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 seinsyntax/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
autocmdVerwenden Sie das
Syntax
autocmd: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 habeautocmd Syntax c
. Eine Alternative wäre die Verwendung einer Funktion: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 seinsyntax/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 ).
quelle