如何控制vim消息显示时间

如何控制vim消息显示时间

有没有办法控制 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+。

相关内容