vimL tidur dalam suatu fungsi

9

Saya mencoba untuk mendefinisikan fungsi yang akan membuatnya lebih mudah untuk melihat di mana kursor berada dengan meletakkan garis silang di sekitarnya selama 100 ms.

Inilah usaha saya:

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

Tampaknya meskipun fungsi di atas memanggil tidur di awal daripada di antara dua panggilan "set".

Adakah sesuatu yang mendasar tentang "tidur" yang saya salah pahami?

Jonathan. Minumlah
sumber
Datang ke sini mencoba melakukan sesuatu yang serupa. Anda bahkan tidak memerlukan fungsi, Anda bisa memetakan perintah langsung di garis peta.
Spidey

Jawaban:

12

Masalahnya adalah bahwa Vim tidak menggambar ulang layar sampai setelah fungsi selesai. Saya tidak yakin apa logika Vim kapan harus menggambar ulang sebenarnya , tetapi dalam kasus seperti ini Anda sering harus menelepon redrawsecara manual:

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

Anda mungkin juga ingin menambahkan <CR>ke pemetaan kunci:

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