在vim中取消对某个模式的高亮显示

23
在vim中,我正在编辑一个文件,其文件类型为“markdown”,但其中包含像$x_i$这样的latex数学表达式。 Vim的markdown语法高亮显示认为模式* _ *(字母下划线字母)是错误的,并且用鲜红色突出显示这些模式中的下划线。我想通过在我的.vimrc文件中添加一行来关闭此功能:
autocmd BufEnter *.Rmd "Dear vim, please don't highlight the pattern *_*"

什么是适当的命令来实现这个?在不编辑语法文件的情况下,是否可能在 .vimrc 中完成?
注意:我希望保留一般的 markdown 语法高亮,只关闭特定的功能。
2个回答

20
如果要从Markdown错误模式中删除_,您可以重新定义它。在我的情况下,我想关闭单词中下划线的错误通知,因为我在我的文档中放了很多网址。
syntax/markdown.vim文件中有一行定义错误模式的语句。
" Original error pattern
syn match markdownError "\w\@<=_\w\@="

从模式中删除_,并将其添加到~/.vim/after/syntax/markdown.vim

" New error pattern without the underscore
syn match markdownError "\w\@<=\w\@="

1
我已经将更改后的文件添加到 after/syntax 中,但仍然出现下划线错误。 - Durga Swaroop
@DurgaSwaroop 还在吗? - Sanghyun Lee
1
对于neovim,~/.config/nvim/after/syntax非常适用,我已经成功使用了。 - xeruf
这适用于在OSX 10.15.7上的vim-8.1。 接受的解决方案对我无效。 - irritable_phd_syndrome
在 .vimrc 文件中添加 " 2022-10-19 防止 "_" 在 .Rmd 文件中高亮显示autocmd BufNewFile,BufRead,BufEnter *.Rmd,*.rmd syn match markdownIgnore "\w\@<=\w\@=" 对我很有用。 - Niels Tolstrup
如果你像我一样使用自制软件,你可能会将markdown.vim文件放在这样的位置:/usr/local/Cellar/vim/9.0.1250/share/vim/vim90/syntax/markdown.vim - undefined

18

你需要修改Markdown语法。其中一种方法是删除错误的解析:

:syn clear markdownError

但这会导致其他语法规则在那个_字符上开始一个斜体段落。最好只需使用以下方法清除错误高亮显示:

但那样会导致其他语法规则在那个_字符上开始一个斜体部分。最好只需使用以下方法清除错误的高亮显示:

:hi link markdownError Normal
为了保留一般错误高亮显示,但只为特殊的$x_i$字符串定义异常情况,请定义一个覆盖语法组;幸运的是,这很容易做到,因为不存在现有的语法:
:syn match markdownIgnore "\$x_i\$"

修改正则表达式以匹配所有可能的数学表达式。

需要将其放入~/.vim/after/syntax/markdown.vim中,以在原始语法脚本之后执行。


可以,谢谢。有没有办法只将其应用于特定的模式?(否则我会接受你的答案) - sieste
确实更好了;我已经添加了。 - Ingo Karkat
这也适用于vimrc。我放入的代码行是 autocmd BufNewFile,BufRead,BufEnter *.Rmd,*.rmd :syn match markdownIgnore "\$.*_.*\$" - sieste
1
尝试使用 :autocmd Syntax markdown syn match markdownIgnore "\$x_i\$",但这必须在你的 .vimrc 中的 :syn on 之后。如果仍然无法正常工作,请尝试在其前面添加 :autocmd VimEnter * ... - Ingo Karkat
另一个建议:将所有内容放入.vimrc中不可扩展;迟早会得到一个非常长的怪物。最好使用Vim提供的封装功能。 - Ingo Karkat
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接