Wie kann ich die Hervorhebung des Python-Klassennamens ändern?

7

Wie kann ich eine Syntax definieren, um den Python-Klassennamen MyClassin vim hervorzuheben ?

class MyClass(object):
    ......

Vim hat den Klassennamen bereits hervorgehoben. Es wird jedoch anscheinend auf die gleiche Weise mit dem Funktionsnamen hervorgehoben. Kann ich die beiden Kategorien besser hervorheben?

Ist es ein richtiger Weg über syn match ...? In der Standardeinstellung habe syntax/python.vimich Folgendes gefunden:

syn match   pythonFunction  "\h\w*" display contained

Ich habe es versucht, aber meine synDefinition muss falsch sein, es funktioniert nicht.

syn match pythonClassName "^class \(*\):" display contained
call HI('pythonClassName',         124, '', 'bold', 'bold')

HI()ist eine selbst definierte Funktion, die ich zum pythonStatementerfolgreichen Ändern verwendet habe .

Tatsächlich weiß ich nicht, was es wirklich tut. Es ist nur ein Versuch. Könnte mir jemand ein paar Tipps geben? Vielen Dank!

Jimmy
quelle
1
Willkommen auf unserer Seite! Was versuchst du genau zu tun? Vim sollte die Klasse bereits hervorheben (zumindest auf meinem System). Wenn dies nicht der Fall ist, sollten Sie möglicherweise versuchen, es syntax onin Ihrem vimrc zu verwenden. Wenn es hervorgehoben ist, Sie aber die Hervorhebung ändern möchten, :h mysyntaxfile-adderfahren Sie, wie Sie die aktuelle Syntax-Hervorhebungsdatei überschreiben. In jedem Fall sollten Sie genauer wissen, was Sie bereits versucht haben (welcher Befehl, in welcher Datei usw.).
Statox
Beachten Sie auch, dass Wikia einen nützlichen Tipp hat , um die unter dem Cursor verwendete Syntaxgruppe anzuzeigen .
Statox
@statox Vielen Dank für Ihren Kommentar! Vim hat den Klassennamen wirklich bereits hervorgehoben. Es scheint jedoch den Klassennamen und den Funktionsnamen auf dieselbe Weise hervorzuheben. Könnte ich den Klassennamen und den Funktionsnamen besser unterscheiden können? Übrigens habe ich die Frage genauer geändert, danke!
Jimmy

Antworten:

2

Es wird jedoch anscheinend auf die gleiche Weise mit dem Funktionsnamen hervorgehoben.

Mit können :echo synIDattr(synID(line('.'), col('.'), 1), 'name')wir den Namen der Syntaxgruppe erhalten, was in der Tat so ist pythonFunction.

Wenn /usr/share/vim/vim80/syntax/python.vimwir uns das ansehen, sehen wir, dass dies hervorgehoben wird durch:

syn keyword pythonStatement     class def nextgroup=pythonFunction skipwhite
syn match   pythonFunction  "\h\w*" display contained
hi def link pythonFunction      Function

Es gibt keine Möglichkeit, Klassen separat hervorzuheben. Wenn Sie dies hinzufügen möchten, können Sie Folgendes verwenden:

" Clear default
syn clear pythonStatement

" Set it to what's in the Python file, minus the class.
syn keyword pythonStatement    False None True
syn keyword pythonStatement    as assert break continue del exec global
syn keyword pythonStatement    lambda nonlocal pass print return with yield
syn keyword pythonStatement    def nextgroup=pythonFunction skipwhite

" Now make seperate syntax groups for the class.
syn keyword pythonClassStmt class nextgroup=pythonClass skipwhite
syn match   pythonClass "\h\w*" display contained

" Avoid highlighting attributes as builtins – just added "pythonClass" here.
syn clear pythonAttribute
syn match   pythonAttribute /\.\h\w*/hs=s+1
    \ contains=ALLBUT,pythonBuiltin,pythonFunction,pythonClass,pythonAsync
    \ transparent

" Highlight the class statement and the class name.
hi def link pythonClassStmt Statement
hi pythonClass ctermfg=darkgreen guifg=darkgreen

Ich habe Dunkelgrün verwendet, weil Ruby dies verwendet, aber Sie können jede Farbe verwenden, die Sie mögen. Sie können das classSchlüsselwort beliebig markieren .

Damit dies nach der integrierten Python-Syntaxdatei geladen wird, fügen Sie dies hinzu ~/.vim/after/syntax/python.vim.

Siehe auch: Korrigieren der fehlenden Syntaxhervorhebung für Python für eine allgemeine Einführung in die Syntaxhervorhebung und einige weitere Details.

Martin Tournoij
quelle
Vielen Dank für Ihre Antwort! Ich habe Ihre Lösung jedoch nur versucht, um festzustellen, dass nicht nur der Name der Python-Klasse hervorgehoben wurde, sondern auch einige andere Dinge gleichzeitig geändert wurden, z. B. wurde das X_trainIn self.X_trainauf dieselbe Weise hervorgehoben, was nicht erwartet wird. Könnte es möglich sein, nur die Hervorhebung des Klassennamens zu ändern?
Jimmy
@ Jimmy Ups, sieht so aus, als hätte ich das nicht genug getestet. Vielen Dank für den Hinweis. Ich glaube , ich weiß , was los ist, aber keine Zeit haben , meine Antwort zu aktualisieren , gerade jetzt . Ich werde es später aktualisieren.
Martin Tournoij
@ Jimmy Antwort aktualisiert. Das Problem war, dass ich vergessen hatte, die Syntaxgruppe zu überschreiben pythonAttribute.
Martin Tournoij
Danke vielmals! Es klappt. Beim Öffnen der Python-Datei wird jedoch immer noch ein kleiner Fehler ausgegeben E28: No such highlight group name: pythonAttribute. Könnten Sie es noch einmal testen?
Jimmy
@ Jimmy Ich habe diesen Fehler nicht. Ich bin auch verwirrt, da dieser Fehler highlighteher vom Befehl als vom syntaxBefehl herrührt. Sind Sie sicher, dass dieser Code diesen Fehler ausgibt? Oder ist es ein anderes Skript?
Martin Tournoij