vimL dormir dentro de una función

9

Estoy tratando de definir una función que haga que sea más fácil ver dónde se encuentra el cursor colocando una cruz alrededor de 100 ms.

Aquí está mi intento:

function! Flash()
    set cursorline cursorcolumn
    sleep 100m
    set nocursorline nocursorcolumn
endfunction
nnoremap <leader>fl :call Flash()

Sin embargo, parece que la función anterior está llamando al sueño al principio en lugar de entre las dos llamadas "establecidas".

¿Hay algo fundamental sobre el "sueño" que no entiendo?

Jonathan.Brink
fuente
Vine aquí tratando de hacer algo similar. Ni siquiera necesita una función, puede asignar los comandos directamente en la línea del mapa.
Spidey

Respuestas:

12

El problema es que Vim no vuelve a dibujar la pantalla hasta que se completa la función. No estoy seguro de cuál es exactamente la lógica de Vim sobre cuándo volver a dibujar , pero en este tipo de casos a menudo tiene que llamar redrawmanualmente:

function! Flash()
    set cursorline cursorcolumn
    redraw
    sleep 100m
    set nocursorline nocursorcolumn
endfunction

Probablemente también desee agregar <CR>a la asignación de teclas:

nnoremap <leader>fl :call Flash()<CR>
Martin Tournoij
fuente