Benutzerdefinierte Vim-Hervorhebung (funktioniert nur mit bestimmten Dateitypen)

1524
sixtyfootersdude

Ich habe das in meinem vimrc:

"on will override defaults set. Enable will allow you to set defaults." syntax enable  ...  "attempting to highlight specific keywords so it is easy to see in code." "see help e410 for more info." syn keyword JakeKeywords Question TODO Answer JAKEHTTPS highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue 

(Hinweis: Der besseren Lesbarkeit halber habe ich alle Zitate fertiggestellt.)

Ich habe versucht, das JAKEHTTPSSchlüsselwort in einzufügen:

  • .java Dateien
    • in Kommentaren
    • in Code
  • .xml Dateien
    • in Kommentaren
    • in Code
  • .jak Dateien (benutzerdefiniertes Format, das ich erstellt habe, siehe unten)

Der einzige Ort, an dem das Schlüsselwort hervorgehoben ist, ist in .jak.

Frage: Warum werden diese Schlüsselwörter NICHT in Java-Code oder XML-Code (und möglicherweise auch in anderem Code) hervorgehoben?

~/.vim/ftdetect/jak.vim:

syn region JakeSubtitle start=+==+ end=+==+ highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta  syn region JakeTitle start=+===+ end=+===+ highlight JakeTitle ctermbg=black ctermfg=yellow 

Hinweis: Ich habe diesen Thread erstellt, aber er ist zu unübersichtlich geworden, um nützlich zu sein.

1

3 Antworten auf die Frage

3
asdfg

Bei Standard-Dateitypen werden die Syntax-Tags gelöscht, bevor die Syntaxdatei filetype.vim geladen wird.
Sie können den Befehl

Syntax klar
am Anfang der Syntaxdateien java.vim und xml.vim Ändern Sie
einfach die Zeilen in vimrc wie folgt:
au bufread * syn stichwort JakeKeywords Frage TODO Antwort JAKEHTTPS au bufread * markieren Sie JakeKeywords cterm = Fettdruck = fett ctermbg = schwarz ctermfg = Blau
Das sollte gut funktionieren ...

Oh genial! Das ist eine süße Lösung. Ich habe es noch nicht ausprobiert, aber es wird klar. Bedeutet dies, dass vimrc vor der Syntaxdatei aufgerufen wird? Gibt es einen Ort, an dem ich herausfinden kann, in welcher Reihenfolge diese Dateien heißen? sixtyfootersdude vor 14 Jahren 0
1
user22303

Es kann sein, dass die Schlüsselwörter in einem übergeordneten Bereich oder Übereinstimmungsbereich enthalten sind, der die gesamte Hervorhebung übernimmt. Wenn sich diese Schlüsselwörter beispielsweise innerhalb eines Kommentarbereichs befinden, richtet die zugehörige Syntaxdatei die Hervorhebung ein, die für die gesamte Kommentarzeile gilt, und wird nicht durch die Hervorhebung von Schlüsselwörtern innerhalb des Kommentars überschrieben. Sie wissen dies bereits, weil Kommentarzeilen eine einheitliche Farbe haben und das Hervorheben normaler Schlüsselwörter nicht in Kommentaren gilt.

Um das oben genannte Problem zu beheben, müssen Sie die Syntaxdatei durchsuchen java.vimund sicherstellen, dass sich das Schlüsselwort, das Sie hervorheben möchten, in der 'Contains'-Klausel der Definition des Kommentarbereichs (und / oder.) Befindet alle anderen übergreifenden Regionsdefinitionen, in denen das Keyword hervorgehoben werden soll).

Ein Kommentarbereich in meiner Syntaxdatei für Java ( java.vim) lautet beispielsweise:

syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell 

Sie müssten Ihr Schlüsselwort JakeKeyWordszur obigen Klausel hinzufügen, wenn diese Schlüsselwörter in den Kommentarbereichen hervorgehoben werden sollen. Oder fügen Sie einfach Ihre neuen Keywords zu einer javaToDoGruppe hinzu, die bereits so eingerichtet ist, dass sie in Kommentaren besonders hervorgehoben wird.

Sie sind sich nicht sicher, was Sie mit den JakeSubTitleund JakeTitleRegionen tun, die Sie definieren möchten. Das gleiche Problem mit Inhalten kann für sie gelten. Mit dem Befehl "Syntaxübereinstimmung" möchten Sie Regionen hervorheben, die durch ein einzelnes Muster abgeglichen werden können. "Region" ist nur für komplexere Bereiche (normalerweise mehrzeilig) erforderlich, die nicht von einem einzigen übereinstimmen können Muster.

Yepp guter Punkt. sixtyfootersdude vor 14 Jahren 0
@sixtyfooters: Aus irgendeinem Grund konnte ich im anderen Beitrag in diesem Thread keinen Kommentar hinzufügen. Der Befehl ': scriptnames' enthält jedoch eine Liste der Skripts, die im aktuellen Puffer in der Ausführungsreihenfolge abgerufen (dh ausgeführt) wurden. user22303 vor 14 Jahren 1
0
DaveParillo

Wie Sie die Hervorhebung einstellen, hängt davon ab, wie Sie vim ausführen. Ich vermute, Sie laufen gvimin der Gui.

Ihre Einstellungen funktionieren, wenn Sie vim in einem Terminal ausführen, aber wenn Sie gvim ausführen, müssen Sie guibg & guifg verwenden. Wenn ich die oben genannten Einstellungen verwende und den Hervorhebungs-Test in gvim durchführe, :so $VIMRUNTIME/syntax/hitest.vimhat JakeKeywords keine spezielle Formatierung angewendet. Wenn ich den Test erneut durchführe, aber vim von der Befehlszeile aus aufrufe (ich bin gerade in einer WindowsXP-Cmd-Shell), funktioniert Ihr Beispiel für JakeKeywords hervorragend.

Wenn ich mich ändere

highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue 

zu

highlight JakeKeywords gui=bold guibg=black guifg=Blue 

dann bekomme ich in gvim blauen text auf schwarzem hintergrund.

Wenn Sie möchten, dass für dieses Highlight beide Farbterminals (wie Terminator oder Nautilus) und gvim angewendet werden, müssen Sie beide Markierungen festlegen:

highlight JakeKeywords gui=bold cterm=bold term=bold ctermbg=black \ ctermfg=Blue guibg=black guifg=Blue 
Hallo Dave, Danke für die Antwort. Ich verwende vim auf der Kommandozeile (Solaris, Bash). Ich denke nicht, dass dies das Problem ist, da, wie ich es in meiner Beschreibung beschrieben habe, bestimmte Dateitypen hervorgehoben werden (dh diejenigen, für die vim nicht bereits hervorgehoben wurde). sixtyfootersdude vor 14 Jahren 0
wie sieht die Ausgabe von hitest aus? DaveParillo vor 14 Jahren 0