So funktioniert die Hervorhebung der Syntax in Kürze:
In syntax/<filetype>.vim
der Syntax werden Regeln mit dem :syntax
Befehl definiert . Dieser Befehl definiert die Syntax. Es heißt "Wenn Text mit diesem regulären Ausdruck übereinstimmt, ist es eine Zeichenfolge" und so weiter. Zu diesem Zweck wird eine Markierungsgruppe zugewiesen . Es spielt nicht sagen nichts über Farben als solche.
:highlight
sagt "Markieren Sie diese Gruppe mit diesen Farben". Dies erfolgt im Farbschema , nicht in der Syntaxdatei. Es gibt eine Reihe von Standard - Highlight - Gruppen ( String
, Function
, Special
, usw.) , die alle Farbschemata definieren sollen.
Sie sind jedoch keineswegs auf diese Standardgruppen beschränkt, und Sie können so viele Gruppen erstellen, wie Sie möchten (Standardsyntaxdateien jedoch normalerweise nicht).
Die indent/<filetype>.vim
Datei steuert das automatische Einrücken. Für Ruby heißt es beispielsweise "die Zeile danach def
sollte die Einrückungsstufe erhöhen" und "die Zeile danach end
sollte die Einrückungsstufe um eine Stufe verringern". Es macht nichts mit Farben oder Syntaxhervorhebung.
Warum werden verschiedene Programmiersprachen unterschiedlich hervorgehoben? Zum Teil wegen der persönlichen Ästhetik und der Meinungen derjenigen, die es geschrieben haben. In Ruby wird beispielsweise die Type
Markierungsgruppe für Klassennamen verwendet. Es könnte aber auch Function
etwas anderes gewesen sein. Warum ist es Type
? Wahrscheinlich, weil der Autor dachte, dass es in seinem Farbschema besser aussieht.
Noch wichtiger ist jedoch, dass die Sprachen unterschiedliche Semantiken und Empfindlichkeiten haben. In Ruby self
ist ein spezielles Schlüsselwort. Du kannst nicht self = "foo"
oder def self()
. Das sind Fehler. Dies ist in Python jedoch nicht der Fall. Es ist nur eine weitere Variable ohne besondere Eigenschaften. Tun:
x = Object()
x.foo()
wird von Python wirklich "übersetzt" zu:
Object.foo(x)
Der Name self
ist nur eine Konvention (fast universell übernommen), aber Sie können ihn beliebig benennen. def x(this):
oder def x(xxx):
sind gleichermaßen gültig. Sie können den Namen auch an einer self
beliebigen Stelle verwenden. self = 'foo'
und def self():
sind vollkommen in Ordnung.
Ich würde argumentieren, dass dies self
nicht hervorgehoben werden sollte, da es sich weder um ein spezielles Schlüsselwort noch um eine vordefinierte Variable (wie str
) handelt. Es gibt keine Spur des Wortes self
in der Syntaxdatei, daher sieht es so aus, als hätte der Autor dasselbe begründet :-)
Wenn Sie hervorgehoben werden möchten self
, müssen Sie eine Syntaxregel dafür erstellen:
:syn keyword pythonBuiltin self
Der pythonBuiltin
Gruppenname ist bereits in der Standardsyntaxdatei definiert und mit der Function
Markierungsgruppe verknüpft . Verwenden Sie zum Verwenden einer neuen Markierungsgruppe Folgendes:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
Um diese Änderungen vorzunehmen, können Sie sie nicht einfach in Ihre vimrc-Datei einfügen. Die Syntaxdatei überschreibt sie. Stattdessen müssen Sie es ausführen, nachdem die Syntaxdatei geladen wurde. Dies können Sie auf zwei Arten tun:
Verwenden Sie ein FileType
Autocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
Verwenden Sie das after-directory
, ~/.vim/after/syntax/python.vim
:
syn keyword pythonSelf self
highlight def link pythonSelf Special
Beide Methoden sind praktisch gleich. Verwenden Sie, was Sie bevorzugen.