
¿Hay alguna manera de controlar el tiempo de visualización de los mensajes en vim?
Por ejemplo, al buscar en vim y llegar al final, se mostrará:
search hit BOTTOM, continuing at TOP
Incluso si después de varios segundos el cursor ya se ha alejado, el mensaje seguirá sin desaparecer.
La única forma de desaparecer esos mensajes que se me ocurre es hacer
:redraw
Sin embargo, espero encontrar una manera de hacerlo manualmente para todos esos mensajes después de un período de tiempo, digamos 2 segundos.
Respuesta1
Vim no proporciona una forma útil de establecer retrasos precisos sin interferir con la interacción del usuario. Lo mejor que probablemente puedas esperar es esto:
:autocmd CursorHold * :echo
Elegí :echo
porque es menos perturbador visualmente :redraw
y debería borrar los mensajes del área de comando.
Tenga en cuenta que esto sólo funcionará cuando esté en modo normal ynopresione una tecla durante un período de tiempo (generalmente cuatro segundos). Para saber por qué, consulte:
:help CursorHold
:help 'updatetime'
En otras palabras, esto no va a resultar muy eficaz. Se ha debatido sobre la creación de un verdadero bucle de eventos en Vim al que se pueda conectar, pero a menos que eso suceda, lo que desea no estará disponible.
Respuesta2
Si el updatetime
valor es pequeño, echo
se borrará el mensaje de la línea cmd demasiado rápido. Podemos usar la timer_start()
función [^1] parademorala ejecución del eco. Esto es lo que funciona bien para mí:
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
El valor 25000
se mide en milisegundos, por lo que significa aproximadamente 25 segundos después de mantener el cursor. Puede modificar este valor según sus necesidades.
[^1]: parece que timer_start()
solo está disponible para Vim 8.0+.