有没有办法控制 vim 中消息的显示时间?
例如在vim中搜索,点击底部会显示:
search hit BOTTOM, continuing at TOP
即使过了几秒钟,光标已经移开,消息仍然不会消失。
我能想到的唯一消除此类信息的方法就是
:redraw
不过,我希望找到一种方法,在一段时间(比如说 2 秒)后手动处理所有此类消息。
答案1
Vim 没有提供在不干扰用户交互的情况下设置精确延迟的有效方法。您可能希望的最好结果是:
:autocmd CursorHold * :echo
我之所以选择它,:echo
是因为它在视觉上比前者更不具干扰,:redraw
而且它可以清除命令区域中的消息。
请注意,此功能仅在您处于正常模式时才有效,并且不要按住某个键一段时间(通常为 4 秒)。有关原因,请参阅:
:help CursorHold
:help 'updatetime'
换句话说,这不会很有效。有人讨论过在 Vim 中创建一个可以挂接的真正的事件循环,但除非这样做,否则你想要的东西将无法实现。
答案2
如果该updatetime
值较小,echo
则会过快清除命令行消息。我们可以使用timer_start()
[^1] 函数来延迟echo 的执行。以下是对我来说效果很好的方法:
function! s:empty_message(timer)
if mode() ==# 'n'
echon ''
endif
endfunction
augroup cmd_msg_cls
autocmd!
autocmd CursorHold * call timer_start(25000, funcref('s:empty_message'))
augroup END
该值25000
以毫秒为单位,因此它表示光标保持后大约 25 秒。您可以调整此值以适合您。
[^1]: 看来只timer_start()
适用于 Vim 8.0+。