
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 以降でのみ使用できるようです。