将vim中的匹配限制为某些文件类型?

时间:2009-11-09 17:46:11

标签: highlighting vim

我在.vimrc中有以下内容,以突出显示超过80个字符的行:

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

这很有效。但问题是,如果它只适用于某些文件类型,我会更喜欢它。基本上,任何编程语言都应该突出显示,而html,xml和txt文件之类的东西不应该突出显示。我很确定我可以使用autocmd轻松完成这项工作,但我不确定这是否是实现该目标的最佳方式。有人有什么意见吗?

2 个答案:

答案 0 :(得分:7)

对这样的任务使用匹配的问题在于它是活动窗口的本地,而不是正在编辑的缓冲区。我会尝试以下几点:

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甚至应该添加到列表中。

答案 1 :(得分:6)

听起来你可能想要这样的东西:

autocmd FileType html,xml highlight OverLength ctermbg=red ctermfg=white guibg=#592929
autocmd FileType html,xml match OverLength /\%81v.*/

无论如何似乎对我有用: - )