Wie kann ich die Rechtschreibung in HTML-Attributen überprüfen?

9

Die Rechtschreibprüfung von Vim funktioniert in den meisten Fällen hervorragend - sie ist sogar intelligent genug, um Code in den meisten Sprachen von Literalen und Kommentaren zu unterscheiden. Ich habe jedoch Probleme mit der HTML-Rechtschreibprüfung:

  <div title="text with mistaek #1" data-text="text with mistaek #2">text with mistaek #3</div>

Im obigen Beispiel wird nur der innere Fehler divhervorgehoben (Nr. 3). Es wäre großartig, wenn alle relevanten Attribute überprüft würden - zumindest titleund data-*im Idealfall - eine konfigurierbare Liste von Attributen.

Ist es über Konfiguration oder VimScript erreichbar? Das Plugin funktioniert auch, sollte aber im Idealfall für verschiedene HTMLähnliche Dateien konfiguriert werden (z. B. ASP .NET MVC- cshtmlDateien).

Jarlax
quelle

Antworten:

5

Die Syntaxelemente, in denen Vim Rechtschreibfehler hervorhebt, werden mithilfe der Cluster @Spellund definiert @NoSpell. Ausführliche Informationen finden Sie unter :help spell-syntax(und den übrigen Dateien :help spellund :help syntax).

Die schnelle und schmutzige Lösung, um das gewünschte Ergebnis zu erzielen, besteht darin, eine neue Datei in Ihrem Vim-Konfigurationsverzeichnis zu erstellen: .vim/after/syntax/html.vimmit dem Inhalt:

syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell
syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell

Diese Zeilen definieren die Syntaxhervorhebung für HTML-Attribute und wurden aus der Datei html.vim kopiert, die in den Standard-Syntaxdateien von Vim enthalten ist. Ich habe dann den @SpellCluster zum containsFeld hinzugefügt , um die Rechtschreibprüfung in jedem Syntaxelement zu aktivieren.

Um dies nur auf die Attribute "title" und "data- *" anzuwenden, müssen Sie den regulären Ausdruck, der zum Abgleichen der Elemente verwendet wird, optimieren und die Funktionsweise der HTML-Hervorhebung etwas umfangreicher bearbeiten. Hier ist eine Lösung, die nur für "Titel" -Attribute funktioniert:

syn region htmlStringSpell contained start=+title=["']+hs=s+6 end=+["']+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell containedin=htmlTag,ScriptTag
hi def link htmlStringSpell String

NB

  1. Der reguläre Ausdruck enthält jetzt den Namen des titleAttributs und einen Versatz, sodass dieser Teil des Syntaxelements nicht in der Hervorhebung enthalten ist. (Siehe :help syn-pattern-offset)
  2. Das Syntaxelement hat jetzt einen eigenen Namen und muss daher (i) containedinalle Syntaxelemente sein, in denen htmlStrings über ihre jeweiligen containsEinstellungen enthalten sind. (ii) eine eigene Hervorhebung anwenden lassen.
Reich
quelle
1
Vielen Dank! Meine Antwort wurde aktualisiert, um die Zeilen mit einfachen Anführungszeichen hinzuzufügen. (Arbeiten an der vollständigen Lösung)
Rich
3

Von /usr/share/vim/vim74/syntax/html.vim:

syn region  htmlString   contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc

Um Rechtschreibunterstützung hinzuzufügen, müssen wir das @SpellSchlüsselwort (siehe :help spell-syntax) wie folgt hinzufügen :

syn region  htmlString   contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell
syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell

Sie müssen dies ~/.vim/after/syntax/html.vimeingeben, damit die Standardsyntaxregeln überschrieben werden.

Bonus-Tipp:
Die erste Zeile steht für Attribute in Zeichenfolgen in doppelten Anführungszeichen ( attr="value") und die zweite Zeile für Zeichenfolgen in einfachen Anführungszeichen ( attr='value'). Sie können auch nur eine davon überschreiben , sodass Sie auswählen können, ob Sie eine Rechtschreibprüfung durchführen möchten.

Martin Tournoij
quelle