Як я можу перевірити написання атрибутів HTML?


9

Функція перевірки орфографії Vim чудово працює в більшості випадків - вона навіть досить розумна, щоб відрізнити код від літералів і коментарів на більшості мов. Однак у мене є проблеми з перевіркою правопису HTML:

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

У прикладі вище divвиділяється лише помилка всередині (№3). Було б чудово, щоб усі відповідні атрибути були перевірені - принаймні, titleі в data-*ідеалі - налаштований список атрибутів.

Це можна досягти за допомогою конфігурації або VimScript? Плагін також буде робити, але в ідеалі він повинен бути налаштований для HTMLфайлів, що нагадують різні файли (наприклад, ASP .NET MVC cshtmlфайли).

Відповіді:


5

Елементи синтаксису, в яких Vim виділяє орфографічні помилки, визначаються за допомогою кластерів @Spellта @NoSpellкластерів. Детальну інформацію див. У :help spell-syntax(та решті файлів :help spellта :help syntaxфайлів).

Швидке та брудне виправлення для отримання бажаного результату полягає у створенні нового файлу у каталозі Vim config: .vim/after/syntax/html.vimіз вмістом:

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

Ці рядки визначають виділення синтаксису для атрибутів HTML і були скопійовані з файлу html.vim, що входить до стандартних файлів синтаксису Vim. Потім я додав @Spellкластер у containsполе, щоб увімкнути перевірку орфографії у кожному елементі синтаксису.

Для того, щоб застосувати це лише до атрибутів "title" та "data- *", потрібна точна настройка регулярного виразу, що використовується для відповідності елементів, та трохи більш масштабне редагування способу роботи підсвічування HTML. Ось рішення, яке працює лише для атрибутів "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. Тепер регулярний вираз включає ім'я titleатрибута та зміщення, щоб ця частина елемента синтаксису не була включена до виділення. (Див. :help syn-pattern-offset)
  2. Елемент синтаксису тепер має своє ім'я, а тому повинен (i) бути containedinвсіма елементами синтаксису, до яких містяться htmlStrings, за допомогою відповідних containsналаштувань. (ii) застосовувати власну підсвітку.

1
Дякую! Оновили свою відповідь, щоб додати рядки з однією цитатою. (Працює над повним виправленням)
Рік

3

Від /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

Щоб додати правописну підтримку, нам потрібно додати @Spellключове слово (див. :help spell-syntax) Так:

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

Вам потрібно поставити це, ~/.vim/after/syntax/html.vimщоб воно змінило правила синтаксису за замовчуванням.

Порада про бонус:
Перший рядок призначений для атрибутів у рядках з подвійним котируванням ( attr="value"), а другий - для рядків з одним цитуванням ( attr='value'). Ви також можете змінити лише один із них, тож ви зможете вибрати, чи маєте ви перевірку орфографії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.