Comment vérifier l'orthographe des attributs HTML?

9

La fonction de vérification orthographique de Vim fonctionne très bien dans la plupart des cas - elle est même assez intelligente pour distinguer le code des littéraux et des commentaires dans la plupart des langues. Cependant, j'ai des problèmes avec la vérification orthographique HTML:

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

Dans l'exemple ci-dessus, seule l'erreur à l'intérieur divest mise en évidence (# 3). Il serait formidable de vérifier tous les attributs pertinents - au moins titleet data-*, idéalement - la liste des attributs configurables.

Est-il réalisable via la configuration ou VimScript? Le plugin fera également l'affaire, mais idéalement, il devrait être configurable pour des HTMLfichiers de type différent (par exemple, les cshtmlfichiers ASP .NET MVC ).

Jarlax
la source

Réponses:

5

Les éléments de syntaxe dans lesquels Vim mettra en évidence les fautes d'orthographe sont définis à l'aide des clusters @Spellet @NoSpell. Voir :help spell-syntax(et le reste des fichiers :help spellet :help syntax) pour plus de détails.

La solution rapide et sale pour obtenir le résultat souhaité est de créer un nouveau fichier dans votre répertoire de configuration Vim: .vim/after/syntax/html.vimavec le contenu:

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

Ces lignes définissent la coloration syntaxique des attributs HTML et ont été copiées à partir du fichier html.vim inclus dans les fichiers de syntaxe standard de Vim. J'ai ensuite ajouté le @Spellcluster au containschamp afin d'activer la vérification orthographique dans chaque élément de syntaxe.

Pour appliquer cela uniquement aux attributs "title" et "data- *", il faut affiner l'expression régulière utilisée pour faire correspondre les éléments, et une édition légèrement plus complète du fonctionnement de la mise en surbrillance HTML. Voici une solution qui fonctionne uniquement pour les attributs "title":

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. L'expression régulière inclut désormais le nom de l' titleattribut et un décalage afin que cette partie de l'élément de syntaxe ne soit pas incluse dans la mise en évidence. (Voir :help syn-pattern-offset)
  2. L'élément de syntaxe a maintenant son propre nom, et doit donc (i) être containedintous les éléments de syntaxe dans lesquels htmlStrings sont contenus via leurs containsparamètres respectifs . (ii) avoir sa propre mise en évidence appliquée.
Riches
la source
1
Merci! Mise à jour de ma réponse pour ajouter les lignes de guillemet simple. (Travail sur le correctif complet)
Rich
3

De /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

Pour ajouter la prise en charge de l'orthographe, nous devons ajouter le @Spellmot - clé (voir :help spell-syntax) comme ceci:

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

Vous devez le mettre ~/.vim/after/syntax/html.vimpour qu'il écrase les règles de syntaxe par défaut.

Astuce bonus:
la première ligne concerne les attributs dans les chaînes entre guillemets doubles ( attr="value") et la seconde dans le cas des chaînes entre guillemets simples ( attr='value'). Vous pouvez également remplacer un seul d'entre eux, vous pouvez donc choisir si vous avez la vérification orthographique.

Martin Tournoij
la source