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

Pau*_*cks 8 vim highlighting

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

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.*/
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*enj 6

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

autocmd FileType html,xml highlight OverLength ctermbg=red ctermfg=white guibg=#592929
autocmd FileType html,xml match OverLength /\%81v.*/
Run Code Online (Sandbox Code Playgroud)

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


jam*_*san 6

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

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()
Run Code Online (Sandbox Code Playgroud)

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

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