Como controlar o tempo de exibição de mensagens do vim

Como controlar o tempo de exibição de mensagens do vim

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 :echoporque é menos perturbador visualmente :redrawe 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 updatetimevalor for pequeno, echoa 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+.

informação relacionada