関数内のvimL睡眠


9

私は、十字カーソルを100ミリ秒間置いてカーソルの位置を簡単に確認できる関数を定義しようとしています。

これが私の試みです:

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

ただし、上記の関数は2つの「セット」呼び出しの間ではなく、最初にスリープを呼び出しているようです。

私が誤解している「睡眠」についての基本的なものはありますか?


同様のことをしようとしてここに来ました。関数も必要ありません。コマンドをマップ行に直接マップできます。
Spidey

回答:


12

問題は、関数が完了するまでVimが画面を再描画しないことです。いつ再描画するかというVimのロジックが正確に何であるかはわかりませんが、このような場合、redraw手動で呼び出す必要があります。

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

<CR>キーマッピングに追加することもできます。

nnoremap <leader>fl :call Flash()<CR>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.