2012-12-28 40 views
4

我有以下四種類型的我.vimrc高亮(每一個顯示不同的顏色):修改VIM突出重點

  • incsearch(亮點 - 爲 - 您 - 搜索匹配)
  • 匹配(當前詞,一拉Visual Studio編輯器)
  • 2match(在行尾)
  • hlsearch(經常/搜索匹配)
尾部空格

突出顯示的優先級似乎與我上面列出的完全一樣。例如。增量搜索着色將覆蓋任何其他匹配顏色,如果出現在相同的字符。

我想讓hlsearch第二優先,以便它覆蓋match2match顏色(如果出現在同一字符中)。

有什麼辦法可以做到這一點?

供參考,這是相關行我.vimrc文件:

[...] 
set hlsearch 
set incsearch 
[...] 
function Matches() 
    highlight curword ctermbg=darkgrey cterm=bold gui=bold guibg=darkgrey 
    silent! exe printf('match curword /\V\<%s\>/', escape(expand('<cword>'), '/\')) 
    highlight eolspace ctermbg=red guibg=red 
    2match eolspace /\s\+$/ 
endfunction 
au CursorMoved * exe 'call Matches()' 
[...] 

回答

6

一切您使用的優先級是固定的;指定優先級的唯一方法是通過matchadd(),您可以將其用作:match:2match的替代。由於hlsearch的優先級爲零,所以你需要傳遞一個負的優先級,例如-1)。

例如,更換

:match Match /\<\w\{5}\>/ 

if exists(w:lastmatch) 
    call matchdelete(w:lastmatch) 
endif 
let w:lastmatch = call matchadd('Match', '\<\w\{5}\>', -1) 
+0

這正好解決的優先事項,但引入了一個問題:matchadd不會_replace_以前的比賽,而是** **增加了一個新的一。因此,它不再與當前單詞匹配,而是與當前單詞和所有先前單詞匹配。 – STenyaK

+0

你必須在下次調用時記住返回的ID和'matchdelete()'它。無論如何,你可能會爲此定義一個自定義的':Match'命令,所以把這個額外的邏輯放在那裏。 –

+0

謝謝,這工作。請修改您的答案,以反映matchadd在重複使用時不等於匹配,需要'if exists(g:lastmatch)call matchdelete(g:lastmatch)endif;讓g:lastmatch = call matchadd(...)' – STenyaK