vimL sleep all'interno di una funzione


9

Sto cercando di definire una funzione che renderà più facile vedere dove si trova il cursore posizionando il mirino per 100 ms.

Ecco il mio tentativo:

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

Sembra però che la funzione precedente stia chiamando lo sleep all'inizio piuttosto che tra le due chiamate "set".

Esiste qualcosa di fondamentale nel "sonno" che sto fraintendendo?


Sono venuto qui cercando di fare qualcosa di simile. Non hai nemmeno bisogno di una funzione, puoi mappare i comandi direttamente sulla linea della mappa.
Spidey,

Risposte:


12

Il problema è che Vim non ridisegna lo schermo fino al completamento della funzione. Non sono sicuro di quale sia la logica di Vim su quando ridisegnare sia esattamente , ma in questo caso spesso devi chiamare redrawmanualmente:

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

Probabilmente vuoi anche aggiungere <CR>alla mappatura dei tasti:

nnoremap <leader>fl :call Flash()<CR>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.