Ich versuche, die Syntaxhervorhebung für Python zu korrigieren. Meine Farben unterscheiden sich von denen in Screenshots, wie sie in verschiedenen Vim-Farbschemata "aussehen" sollten. Und Sie können den Unterschied beim Vergleich von .rb (das korrekt angezeigt wird) mit .py sehen, was so aussieht, als wäre es ausgeschaltet:
Beachten Sie beispielsweise, wie self
nicht hervorgehoben wird. (Dies ist in base16, aber der Vergleich wäre in anderen Farbschemata ähnlich). Im Allgemeinen sieht es so aus, als ob die Hervorhebung der Objektsyntax falsch ist.
Einige Dinge, die ich versucht habe:
- Betrachten der Syntax-Skripte, die vim lädt; Der einzige Unterschied zwischen .py und .rb im folgenden Beispiel besteht darin, dass ruby natürlich indent / ruby.vim und syntax / ruby.vim erhält, während python indent / python.vim und syntax / python.vim erhält. Dies sind die Dateien, die mit Homebrew Vim geliefert werden.
- Laden der gleichen Dateien in macvim anstatt in terminal (iterm2) vim; Gleiches Problem, die Dateien sehen genauso aus wie auf dem Bild.
- Hinzufügen der neuen Datei python.vim . Löst das Problem nicht, auch wenn es als
.vim/after
Skript verwendet wird.
Anregungen sind willkommen; Ich habe stundenlang mit dem Kopf darauf geschlagen und kann nicht herausfinden, warum die Hervorhebung nicht wie erwartet funktioniert.
quelle
Antworten:
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 danachdef
sollte die Einrückungsstufe erhöhen" und "die Zeile danachend
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 auchFunction
etwas anderes gewesen sein. Warum ist esType
? 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 nichtself = "foo"
oderdef self()
. Das sind Fehler. Dies ist in Python jedoch nicht der Fall. Es ist nur eine weitere Variable ohne besondere Eigenschaften. Tun:wird von Python wirklich "übersetzt" zu:
Der Name
self
ist nur eine Konvention (fast universell übernommen), aber Sie können ihn beliebig benennen.def x(this):
oderdef x(xxx):
sind gleichermaßen gültig. Sie können den Namen auch an einerself
beliebigen Stelle verwenden.self = 'foo'
unddef 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 (wiestr
) handelt. Es gibt keine Spur des Wortesself
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:Der
pythonBuiltin
Gruppenname ist bereits in der Standardsyntaxdatei definiert und mit derFunction
Markierungsgruppe verknüpft . Verwenden Sie zum Verwenden einer neuen Markierungsgruppe Folgendes: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:Verwenden Sie das
after-directory
,~/.vim/after/syntax/python.vim
:Beide Methoden sind praktisch gleich. Verwenden Sie, was Sie bevorzugen.
quelle