
有沒有辦法控制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+。