
Есть ли способ контролировать время отображения сообщений в 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
слишком быстро очистит строку cmd msg. Мы можем использовать timer_start()
функцию [^1] длязадерживатьвыполнение эха. Вот что хорошо работает для меня:
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+.