如何触发搜索结束或调用nohlsearch
How to trigger end of search or nohlsearch was called
我的 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
这样做的目的是突出显示(下划线)光标下的匹配词。
我遇到的问题是当我使用 /、?、*、# 等进行搜索时。匹配的突出显示会覆盖搜索突出显示。
我能知道 "end of search"(我不知道 "end of search" 的定义,但也许有人可以提出建议)或 "nohlsearch" 被调用了吗?
提前致谢。
- 如果从
:match
切换到 :call matchadd(...)
,则可以指定 {priority}
。负数会将突出显示 置于搜索突出显示 下方(优先级为 0
;默认为 10
)。
- "end of search" 没有活动。您可以覆盖所有与搜索相关的命令(
/
、?
、*
等);这将检测到 start 搜索。对于 /
和 ?
,您可以定义 cmap <CR>
并检查 getcmdtype() =~# '[/?]'
以检测搜索的结论。我不推荐这种方法;映射可能会干扰其他插件。
- 而不是使用
:match
(这是 window-local,因此突出显示的行为也不同于内置搜索突出显示),您可以自动调整当前搜索模式(注册 /
) 代替。我的 SearchHighlighting plugin 使用其 :SearchAutoHighlighting
命令选择了这种方法。 (插件页面有许多您可能想要查看的替代插件的链接;我更喜欢维护良好的插件,而不是我 ~/.vimrc
中的自定义代码片段。)
我的 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
这样做的目的是突出显示(下划线)光标下的匹配词。
我遇到的问题是当我使用 /、?、*、# 等进行搜索时。匹配的突出显示会覆盖搜索突出显示。
我能知道 "end of search"(我不知道 "end of search" 的定义,但也许有人可以提出建议)或 "nohlsearch" 被调用了吗?
提前致谢。
- 如果从
:match
切换到:call matchadd(...)
,则可以指定{priority}
。负数会将突出显示 置于搜索突出显示 下方(优先级为0
;默认为10
)。 - "end of search" 没有活动。您可以覆盖所有与搜索相关的命令(
/
、?
、*
等);这将检测到 start 搜索。对于/
和?
,您可以定义cmap <CR>
并检查getcmdtype() =~# '[/?]'
以检测搜索的结论。我不推荐这种方法;映射可能会干扰其他插件。 - 而不是使用
:match
(这是 window-local,因此突出显示的行为也不同于内置搜索突出显示),您可以自动调整当前搜索模式(注册/
) 代替。我的 SearchHighlighting plugin 使用其:SearchAutoHighlighting
命令选择了这种方法。 (插件页面有许多您可能想要查看的替代插件的链接;我更喜欢维护良好的插件,而不是我~/.vimrc
中的自定义代码片段。)