如何检查HTML属性中的拼写?


9

Vim拼写检查功能在大多数情况下都非常有效-甚至还足够聪明,可以区分大多数语言中的文字,注释和代码。但是我有HTML拼写检查问题:

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

在上面的示例中,仅div高亮显示内部错误(#3)。这将是巨大的,拥有所有相关属性检查-至少titledata-*,理想-属性的配置清单。

是否可以通过配置或VimScript实现?插件也可以,但是理想情况下,它应该可以针对HTML类似文件的文件(例如ASP .NET MVC cshtml文件)进行配置。

Answers:


5

Vim将使用@Spell@NoSpell集群定义Vim突出显示拼写错误的语法项。见: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属性的语法突出显示,并从Vim的标准语法文件中包含的html.vim文件复制而来。然后,我将@Spell群集添加到该contains字段中,以便在每个语法项中启用拼写检查。

为了仅将此属性应用于“ title”和“ data- *”属性,需要对用于匹配项的正则表达式进行微调,并对HTML高亮的工作方式进行更广泛的编辑。这是仅适用于“标题”属性的解决方案:

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)是containedinhtmlStrings通过其各自的contains设置包含在其中的所有语法项。(ii)有自己的突出显示。

1
谢谢!更新了我的答案以添加单引号行。(正在研究完整的解决方案)
Rich

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')中的属性。您也可以仅覆盖其中之一,因此可以选择是否进行拼写检查。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.