我在我的vimrc
内有以下代码hi CurrentWordUL cterm=underline gui=underline
hi Search cterm=underline ctermfg=124 gui=underline guifg=#af0000
augroup MyHighlighter
autocmd!
" autocmd User IncSearchEnter MatchHighlighter 0
" autocmd User IncSearchExecute MatchHighlighter 1
set updatetime=700
autocmd CursorHold * if (get(g:, 'matchhl', 1) && (&ft !~ join(g:ft_blacklist, '|')))
| silent! exe printf('match CurrentWordUL /<%s>/', expand('<cword>'))
| endif
autocmd CursorMoved * if (get(g:, 'matchhl', 1) && (&ft !~ join(g:ft_blacklist, '|')))
| silent! exe printf('match none')
| endif
augroup END
nnoremap <silent> <f4> :MatchHighlighter<CR>
command! -nargs=? MatchHighlighter
call ToggleSetMatchHL(
empty(<q-args>) ? !get(g:, 'matchhl', 1) : expand(<q-args>))
function! ToggleSetMatchHL(arg) abort
match none | diffupdate | syntax sync fromstart
let g:matchhl = a:arg
endfunction
目的是突出显示光标下的匹配单词。
我遇到的问题是当我使用/,?, *,#等搜索时。匹配的突出显示了搜索突出显示。
无论如何我都知道"搜索结束"(我不知道"搜索结束"的定义,但也许有人可以建议某事)或" nohlsearch"?
预先感谢。
- 如果您从
:match
切换到:call matchadd(...)
,则可以指定{priority}
。负面的下面的突出显示 搜索突出显示(其中prio0
;默认值为10
)。 - 没有"搜索结束"的事件。您可以覆盖所有与搜索相关的命令(
/
,?
,*
等);那将检测搜索的开始。对于/
和?
,您可以使用getcmdtype() =~# '[/?]'
检查cmap <CR>
来检测搜索的结论。我不建议这种方法;映射可能会干扰其他插件。 - 而不是使用
:match
(这是窗口本地,因此突出显示的行为也与内置搜索突出显示不同),而是可以自动调整当前搜索模式(寄存器/
)。我的searchHighlighting插件使用其:SearchAutoHighlighting
命令选择此方法。(插件页面具有指向许多替代插件的链接;我希望通过我的~/.vimrc
中的自定义代码段来维护良好的插件。)