如何控制vim訊息顯示時間

如何控制vim訊息顯示時間

有沒有辦法控制vim中訊息的顯示時間?

例如,在vim中搜尋並點擊底部時,會顯示:

  search hit BOTTOM, continuing at TOP

即使幾秒鐘後,遊標已經移開,該訊息仍然不會消失。

我能想到的消除此類消息的唯一方法就是

:redraw

但是,我希望找到一種方法在一段時間(例如 2 秒)後手動對所有此類訊息執行此操作。

答案1

Vim 沒有提供一種有用的方法來設定精確的延遲而不干擾使用者互動。您可能希望的最好結果是:

:autocmd CursorHold * :echo

我選擇它:echo是因為它在視覺上的干擾較小,:redraw而且它應該清除命令區域的訊息。

請注意,這僅在您處於正常模式時有效,並且不要按住某個鍵一段時間(通常為四秒)。至於為什麼,請參閱:

: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+。

相關內容