清除 autocmd BufWrite 上的搜索突出显示

Clear search highlight on autocmd BufWrite

我尝试了这三个问题中的大部分建议:

Get rid of Vim's highlight after searching text
How to get rid of search highlight in Vim
Vim clear last search highlighting

主要是:noh,手动输入就可以了。我只是希望它发生在 BufWrite 上,所以我尝试了多种方法,none 其中有效:

function! RemoveHighLight()
    :noh
endfunction

autocmd BufWrite * :call RemoveHighLight()
autocmd BufWrite * :noh
autocmd BufWrite * :execute "normal! :noh\<cr>"

在函数中调试echoms和adebug\<esc>,在第三个autocmd中显示它们执行成功,只是:noh没有效果。

(也试过 :let @/ = "" 有效,但它清除了搜索模式,这不是我正在寻找的。我只想摆脱突出显示直到按下 n 或类似)

使用BufWritePost也没有效果。

这是一种解决方法,但您可以通过 autocmd 设置 nohlsearch。然后你可以添加一个映射来设置它回来 nN.

au BufWrite * set nohlsearch
nnoremap <silent> n n:set hlsearch<CR>
nnoremap <silent> N N:set hlsearch<CR>

或者更好,检查它是否已经设置

au BufWrite * set nohlsearch

nnoremap <silent> n n:call ToggleHlBack()<CR>
nnoremap <silent> N N:call ToggleHlBack()<CR>

function! ToggleHlBack()
  if &hlsearch == 'nohlsearch'
    set hlsearch
  endif
endfunction