VIM:在放入.vimrc时匹配none命令不起作用

时间:2015-10-12 05:18:00

标签: vim vi

我的.vimrc

中有以下内容
syn match ErrorLeadSpace /^ \+/         " highlight any leading spaces
syn match ErrorTailSpace / \+$/         " highlight any trailing spaces
syn match Error80        /\%>80v.\+/    " highlight anything past 80 in red

au FileType c match error /\s\+$\|\%>80v.\+\|[ ][ ]\+\|\n\n\n\+\|,[^ ]\|^[ ]\+[^\*]\|(\s\+\|\s\+)/
au FileType c highlight error ctermbg=red guibg=red ctermfg=blue guifg=blue
au FileType h match error /\s\+$\|\%>80v.\+\|[ ][ ]\+\|\n\n\n\+\|,[^ ]\|^[ ]\+[^\*]\|(\s\+\|\s\+)/
au FileType h highlight error ctermbg=red guibg=red ctermfg=blue guifg=blue

因此,vim突出显示前导/尾随空格或超过80个字符的行中多余字符。

但是,目前我想禁用此错误'高亮。 目前,我通过在打开的文件中使用命令" match none"来实现此目的。然而,当我将此命令放在.vimrc文件中时,这不起作用。

如果对.vimrc进行最少的更改,我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:3)

match none命令在.vimrc文件中不起作用,因为您将突出显示规则放入au命令(这是一个非常好的主意)。每次编辑新的C文件时都会执行au,而.vimrc中的match none命令将无用,因为它很久以前就已经加载了。

您提供的代码中存在几个问题;我在下面解释一下。但你可以这样做,例如:

highlight CError ctermbg=red guibg=red ctermfg=blue guifg=blue

function! DefineAugroup_For_C()
    augroup MyCAugroup
        au!
        au FileType c match CError /\s\+$\|\%>80v.\+\|[ ][ ]\+\|\n\n\n\+\|,[^ ]\|^[ ]\+[^\*]\|(\s\+\|\s\+)/
    augroup END
endf

" Enable the automatic highlight for future edited files, and also for the current one:
command! SetHighlightForC call DefineAugroup_For_C()|exe "set ft=".&ft

" Disable the automatic highlight for future edited files, and also for the current one:
command! UnsetHighlightForC augroup! MyCAugroup|match none

" Comment this line to unable the automatic highlight on load:
SetHighlightForC

然后你可以生动地停用/激活突出显示如下:

:UnsetHighlightForC
:SetHighlightForC

我认为您的代码存在一些问题:

  • 三个第一行未引用任何现有的突出显示(ErrorLeadSpaceErrorTailSpaceError80),因此,除非您使用{{在另一个地方定义它们1}}命令,它没用。 (至少,它对你的问题毫无用处。)

  • 另一个问题是您不需要添加以下行:

    highlight

    因为C头文件没有au FileType h match error /\s\+$\|\%>80v.\+\|[ ][ ]\+\|\n\n\n\+\|,[^ ]\|^[ ]\+[^\*]\|(\s\+\|\s\+)/ au FileType h highlight error ctermbg=red guibg=red ctermfg=blue guifg=blue 文件类型,而是h文件类型以及源文件。默认情况下,c文件类型不存在。要了解文件的文件类型,请执行h

  • 另一件事:如果你想为几种文件类型添加相同的规则,你可以只用一个命令添加它们,方法是用逗号分隔文件类型,如下所示:

    :set ft?