sommeil vimL dans une fonction

9

J'essaie de définir une fonction qui permettra de voir plus facilement où se trouve le curseur en plaçant un réticule pendant 100 ms.

Voici ma tentative:

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

Il semble cependant que la fonction ci-dessus appelle le sommeil au début plutôt qu'entre les deux appels "set".

Y a-t-il quelque chose de fondamental dans le "sommeil" que je ne comprends pas?

Jonathan.Brink
la source
Je suis venu ici en essayant de faire quelque chose de similaire. Vous n'avez même pas besoin d'une fonction, vous pouvez mapper les commandes directement sur la ligne de mappage.
Spidey

Réponses:

12

Le problème est que Vim ne redessine l'écran qu'après la fin de la fonction. Je ne suis pas sûr de ce que la logique de Vim quand de redessiner est exactement , mais dans ce genre de cas , vous avez souvent appeler redrawmanuellement:

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

Vous voudrez probablement aussi ajouter <CR>au mappage des clés:

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