vimL Schlaf innerhalb einer Funktion

9

Ich versuche, eine Funktion zu definieren, mit der Sie leichter erkennen können, wo sich der Cursor befindet, indem Sie 100 ms lang ein Fadenkreuz darum legen.

Hier ist mein Versuch:

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

Es scheint jedoch, dass die obige Funktion den Schlaf am Anfang und nicht zwischen den beiden "Set" -Aufrufen aufruft.

Gibt es etwas Grundlegendes an "Schlaf", das ich missverstehe?

Jonathan.Brink
quelle
Kam hierher und versuchte etwas Ähnliches zu tun. Sie brauchen nicht einmal eine Funktion, Sie können die Befehle direkt auf der Kartenlinie abbilden.
Spidey

Antworten:

12

Das Problem ist, dass Vim den Bildschirm erst nach Abschluss der Funktion neu zeichnet. Ich bin mir nicht sicher, wie Vims Logik beim Neuzeichnen genau lautet , aber in diesem Fall müssen Sie häufig redrawmanuell aufrufen :

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

Sie möchten wahrscheinlich auch Folgendes <CR>zur Schlüsselzuordnung hinzufügen :

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