【问题标题】:Vim syntax: Spell checking some strings, but not othersVim 语法:拼写检查某些字符串,但不检查其他字符串
【发布时间】:2018-04-29 02:34:15
【问题描述】:

这是Vim syntax: Spell checking between certain regions 的后续,我正在尝试为这种语言创建一个名为 Sugar Cube 2 的语法文件。您可以在此处找到更多信息:http://www.motoslave.net/sugarcube/2/docs/macros.html

link 的语法如下:<<link "linkText" "passageName">> 例如:

<<link "Onward, Reginald!" "ThePassageName">>

我想拼写检查“前进,雷金纳德!”但不是“ThePassageName”。我怎么做?我试着弄乱这样的线条,但我认为我走错了方向:

syn region noSpellString  start=+"+ end=+"+ skip=+\\"+ contains=@NoSpell
syn region spellString  start=+"+ end=+"+ skip=+\\"+ nextgroup=noSpellString
syn match linkMacro "<<link\s+" nextgroup=spellString skipwhite skipempty

【问题讨论】:

    标签: vim vim-syntax-highlighting


    【解决方案1】:

    我觉得你的方法不错。如果字符串可以跨越多行,:syn region 是正确的选择。对于单行字符串,:syn match(具有跳过包含转义引号的合适模式)会更好。

    你的例子几乎可以工作:

    • linkMacro 模式需要使用\s\+ 来匹配。
    • spellString 缺少skipwhite
    syn region noSpellString  start=+"+ end=+"+ skip=+\\"+ contains=@NoSpell
    syn region spellString  start=+"+ end=+"+ skip=+\\"+ nextgroup=noSpellString skipwhite
    syn match linkMacro "<<link\s\+" nextgroup=spellString skipwhite skipempty
    

    对于语法脚本,所有语法组都应以与语法名称相同的前缀开头。所以,syntax/sugarcube2.vim 应该有 sugarcube2LinkMacrosugarcube2SpellString 等语法名称。

    【讨论】:

    • 出于某种原因,your previous advice 似乎干扰了这个建议:如果我的 synatx 文件中有这一行,则链接文本不会对 &lt;&lt;link: syn region myMacro matchgroup=macroDelimiter start="&lt;&lt;\zemyDescription" end="&gt;&gt;" contains=@Spell,myDescription 中的任何内容进行拼写检查。你知道为什么会这样吗?他们似乎与我无关。另外,我想突出显示 >. 之间的匹配大括号
    • FWIW,myDescription 行高于其他行。
    • 这里不应该匹配任何内容,因为缺少myDescription。我也无法重现它。你使用SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor 插件吗? (我维护一个extended fork。)这对解决这个问题非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2015-05-08
    • 2013-07-12
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多