
Existe uma maneira de controlar o tempo de exibição das mensagens no vim?
Por exemplo, ao pesquisar no vim e clicar no final, será exibido:
search hit BOTTOM, continuing at TOP
Mesmo que depois de alguns segundos e o cursor já tenha se movido, a mensagem ainda não desaparece.
A única maneira de desaparecer essas mensagens que consigo inventar é fazer
:redraw
No entanto, espero encontrar uma maneira de fazer isso manualmente para todas essas mensagens após um período de tempo, digamos, 2 segundos.
Responder1
O Vim não fornece uma maneira útil de definir atrasos precisos sem interferir na interação do usuário. O melhor que você provavelmente pode esperar é isto:
:autocmd CursorHold * :echo
Eu escolhi :echo
porque é menos perturbador visualmente :redraw
e deve limpar a área de comando de mensagens.
Observe que isso só funcionará quando você estiver no modo normal enãopressione uma tecla por um período de tempo (geralmente quatro segundos). Para saber por que, veja:
:help CursorHold
:help 'updatetime'
Em outras palavras, isso não será muito eficaz. Tem havido uma discussão sobre a criação de um verdadeiro loop de eventos no Vim que pode ser conectado, mas a menos que isso aconteça, o que você deseja não estará disponível.
Responder2
Se o updatetime
valor for pequeno, echo
a mensagem da linha cmd será limpa muito rapidamente. Podemos usar a timer_start()
função [^1] paraatrasoa execução do eco. Aqui está o que funciona bem para mim:
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
O valor 25000
é medido em milissegundos, portanto significa aproximadamente 25 segundos após o cursor ser pressionado. Você pode ajustar esse valor para o que mais lhe convier.
[^1]: parece que timer_start()
está disponível apenas para Vim 8.0+.