gpt4 book ai didi

VIM:如何在超时(X 秒)后关闭搜索突出显示

转载 作者:行者123 更新时间:2023-12-04 17:35:07 25 4
gpt4 key购买 nike

我知道 :nohl并一直使用它,我也使用简单的 Action ,所以当移动到搜索位置时,亮点不会妨碍我。按 n 后,它妨碍了我或 N .

我正在寻找一种在 3 seconds 之后禁用搜索突出显示的方法压制nN ,同样为了完整起见,我想要一种在搜索后也禁用它的方法,例如/search_word<CR> .

最后,它必须是一个非阻塞命令。

谢谢,我正在慢慢进入 vimscript,但是这个超出了我的范围,因为我还没有看到很多带有超时的命令示例。

编辑:

在一些评论和在线研究之后,有很多迹象表明使用 vimscript 没有一个好的方法来做到这一点。

我正在寻找一种使用任何语言以稳定方式执行此操作的方法,例如Perl、Python、Ruby。

编辑 2:

这是我基于@dhruva-sagar 回复的解决方案:
(我将他的答案标记为正确,因为他给了我它的骨架)。

augroup NoHLSearch
au!
autocmd CursorHold,CursorMoved * call <SID>NoHLAfter(4)
augroup END

function! s:NoHLAfter(n)
if !exists('g:nohl_starttime')
let g:nohl_starttime = localtime()
else
if v:hlsearch && (localtime() - g:nohl_starttime) >= a:n
:nohlsearch
redraw
unlet g:nohl_starttime
endif
endif
endfunction

最佳答案

如果您检查 :h :nohl ,您将看到命令 :nohl在 autocmd 中不起作用,原因是 vim 在执行 autocmd 后保存并恢复搜索和搜索突出显示状态。因此,从技术上讲,这样做是不可行的。最好的方法是创建一个映射,如 nnoremap <C-l> :nohlsearch<CR>并在您想暂时禁用搜索突出显示时使用它。

但是,我想通过使用 set nohlsearch 来证明它确实以您期望的方式工作,这是一个小技巧。而不是 nohlsearch ,当然缺点是它会完全关闭搜索突出显示,您需要使用 set hlsearch 重新启用它,所以它不是一个真正的解决方案,但它是一个很好的例子来演示如何在 vim 中执行基于时间的操作。

注意:这更多是出于教育目的,以演示如何在 vim 中执行基于时间的非阻塞任务。这些的性能可能会有所不同,具体取决于您在事件触发函数中执行的操作。

augroup NoHLSearch
au!

autocmd CursorHold,CursorMoved * call <SID>NoHLAfter(3)
augroup END

function! s:NoHLAfter(n)
if !exists('g:nohl_starttime')
let g:nohl_starttime = localtime()
else
if v:hlsearch && (localtime() - g:nohl_starttime) >= a:n
set nohlsearch
unlet g:nohl_starttime
endif
endif
endfunction

关于VIM:如何在超时(X 秒)后关闭搜索突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22798473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com