簡體   English   中英

VIM:放入.vimrc時,match none命令不起作用

[英]VIM: match none command not working when put in .vimrc

我的.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個字符的行中多余的字符。

但是,暫時,我想禁用此“錯誤”突出顯示。 目前,我是通過在打開的文件中使用“不匹配”命令來實現的。 而當我將此命令放入.vimrc文件時,此方法不起作用。

如何以最小的.vimrc更改實現此目標?

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 ),所以,除非你與另一個地方定義他們highlight命令,也沒用。 (至少,對您的問題沒有用)。

  • 另一個問題是您不需要添加以下行:

     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 

    因為C頭文件沒有h文件類型,但是c文件類型以及源文件。 默認情況下, h文件類型不存在。 要知道文件的文件類型, :set ft?

  • 另一件事:如果要為多個文件類型添加相同的規則,則可以通過用逗號分隔文件類型,從而僅用一個命令添加它們,如下所示:

     au FileType c,cpp,php match error /\\s\\+$\\|\\%>80v.\\+\\|[ ][ ]\\+\\|\\n\\n\\n\\+\\|,[^ ]\\|^[ ]\\+[^\\*]\\|(\\s\\+\\|\\s\\+)/ 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM