【问题标题】:How to change word recognition in vim spell?如何改变vim拼写中的单词识别?
【发布时间】:2010-11-19 15:57:03
【问题描述】:

我喜欢 vim 7.0 通过 :set spell 支持拼写检查,我喜欢它默认只检查我的 C 代码中的 cmets 和文本字符串。但我想找到一种方法来改变这种行为,以便 vim 知道当我写包含下划线的单词时,我不想检查那个单词的拼写。

问题是我经常会在我的 cmets 中引用变量或函数名称,所以现在 vim 认为每段不是完全正确单词的文本都是拼写错误。例如。

/* The variable proj_abc_ptr is used in function do_func_stuff' */

大多数时候,下划线分隔的部分是完整的单词,但其他时候它们是缩写词,我不想添加到单词列表中。有什么全局方法可以告诉 vim 在拼写检查时将 _ 作为单词的一部分包含在内?

【问题讨论】:

    标签: vim spell-checking


    【解决方案1】:

    以下是一些更通用的拼写检查异常规则,可放入.vim/after/syntax/{LANG}.vim 文件中:

    " Disable spell-checking of bizarre words:
    "  - Mixed alpha / numeric
    "  - Mixed case (starting upper) / All upper
    "  - Mixed case (starting lower)
    "  - Contains strange character
    syn match spellingException "\<\w*\d[\d\w]*\>"      transparent contained containedin=pythonComment,python.*String contains=@NoSpell
    syn match spellingException "\<\(\u\l*\)\{2,}\>"    transparent contained containedin=pythonComment,python.*String contains=@NoSpell
    syn match spellingException "\<\(\l\+\u\+\)\+\l*\>" transparent contained containedin=pythonComment,python.*String contains=@NoSpell
    syn match spellingException "\S*[/\\_`]\S*"         transparent contained containedin=pythonComment,python.*String contains=@NoSpell
    

    pythonComment,python.*String 更改为您的语言。

    • transparent 表示匹配从包含块继承其突出显示属性(即这些规则不会改变文本的显示方式)。
    • contained 防止这些匹配超出包含块(最后一条规则以 \S* 结尾,这可能匹配超出块的末尾)
    • containedin 包含现有语法组的列表,可将这些新规则添加到其中。
    • contains=@NoSpell 覆盖所有继承的组,从而告诉拼写检查器跳过匹配的文本。

    【讨论】:

      【解决方案2】:

      您需要将其移动到自己的组中。像这样的:

      hi link cCommentUnderscore cComment
      syn match cCommentUnderscore display '\k\+_\w\+'
      syn cluster cCommentGroup add=cCommentUnderscore
      

      在某些荧光笔中,您可能需要在匹配行的末尾使用 contains=@NoSpell,但在 C 中,默认为 @NoSpell,所以应该没问题。

      【讨论】:

      • 效果很好!非常感谢。我将添加一条评论:我最初尝试将它放在我的 .vimrc 中,但它在那里没有做任何事情。查看 :syn 帮助后,我发现要在每次加载 C 语法时使用此语法突出显示更改,我需要将这些行放入 ~/.vim/after/syntax/c.vim 文件中.在我这样做之后,一切都运行良好。
      • 在短暂使用这个改动后,我做了两个细化。首先,不要在单词的开头或结尾处拼写检查带有 _ 的单词。其次,不要使每个带有 _ 的单词都按照 cmets 着色。新行是:“syn match cCommentUnderscore display '_\k\+\|\k\+_\w*' contains”
      猜你喜欢
      • 2014-08-01
      • 2011-03-06
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2015-01-21
      • 1970-01-01
      • 2012-02-28
      相关资源
      最近更新 更多