限制vim中的匹配范围到特定文件类型?

8

我在我的 .vimrc 文件中添加了以下内容来高亮显示超过80个字符的行:

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.*/

这个功能效果相当不错。然而,问题在于我希望它只能在特定的文件类型上工作。基本上,任何编程语言都应该被突出显示,而html、xml和txt文件则不应该。我相信我可以通过自动命令轻松实现这一点,但我不确定这是否是实现目标的最佳方法。有人有什么意见吗?

2个回答

7
听起来你可能需要像这样的东西:
autocmd FileType html,xml highlight OverLength ctermbg=red ctermfg=white guibg=#592929
autocmd FileType html,xml match OverLength /\%81v.*/

对我来说似乎可以工作 :-)



1
啊,实际上这不太是你要求的,是吧。嗯,想知道是否有可能否定FileType... - Benj
是的,就像我说的那样,我认为使用autocmds这种方式可能足够好,你只需要交换这里的文件即可。不是html和xml,而是c、c++等等...因此,如果FileType可以被否定,那就更好了。 - Paul Wicks
嗯,我不认为是这样的。看起来你必须实际列出你想要进行高亮的文件类型。 - Benj
你可以使用 autocmd FileType * 来匹配任何类型。可能会被更具体的设置覆盖。 - mgold

6
使用match解决此类任务的问题在于它仅适用于活动窗口,而不适用于正在编辑的缓冲区。我建议尝试以下方法:
highlight OverLength ctermbg=red ctermfg=white guibg=#592929
fun! UpdateMatch()
    if &ft !~ '^\%(html\|xml\)$'
        match OverLength /\%81v.*/
    else
        match NONE
    endif
endfun
autocmd BufEnter,BufWinEnter * call UpdateMatch()

基本上,您希望在当前窗口的缓冲区更改时触发。此时,您会评估缓冲区具有哪种文件类型,并调整匹配是否应处于活动状态。

如果您还想支持编辑未命名的缓冲区,然后设置其文件类型(通过保存或手动设置&ft),则应将FileType事件添加到列表中。


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