私が与えた例では多くのことを微調整する必要がありますが、あなたの問題を解決する良いスタートになるかもしれません。
関数の実行中に、:redraw
と:sleep
を使用して選択をしばらく描画することができます。
nmap <silent> dd :call Com_dd()<cr>
function! Com_dd() range
" Enter visual mode:
normal! V
" Select multiple lines, when there's a range:
let morelines = a:lastline - a:firstline
if morelines != 0
exe "normal! ".morelines."j"
endif
" Redraw the screen so we can see the selection:
redraw
" Sleeps 200ms:
sleep 200 m
" Delete the selected lines:
normal! d
endf
これは、例えば、範囲と呼ぶことができる:3dd
ここ
はdd
有する例です。
動きとコマンドについて
、それは少しトリッキーですが、あなたは近い 目的の動作を取得することができ、ここでc
コマンドの例です:
nmap <silent> c :set opfunc=Com_c<cr>[email protected]
function! Com_c(type)
let curpos = getpos('.')
if a:0 " Invoked from Visual mode, use gv command.
silent exe "normal! gv"
elseif a:type == 'line'
silent exe "normal! '[V']"
else
silent exe "normal! `[v`]"
endif
redraw
sleep 200 m
normal! d
startinsert
call setpos('.', curpos)
endf
この最後の例では、範囲を処理しませんので、3cw
は動作しません(ただし、c3w
が動作します)。
オペレータのマッピングについては、:h [email protected]
を参照してください。
しかし、の場合、いくつかの新しい問題が発生します。たとえば、.
はこれらのコマンドでは動作しません。 もう1つの例は、標準cw
コマンドは単語の後のスペースを削除しませんが、私の例はそうです。
これらの新しい問題についてはいくつか解決策があるかもしれませんが、今は何もありません。
'Vd'の何が問題なのですか? – hek2mgl
余分なキーストローク以外は何もありません。すべての編集コマンドに対して 'v/V 'を押すたびにかなり重くなります。 – dlmeetei
あなたは 'nnoremap y V'、' nnoremap d V'などと言うことができます。しかし、これは他のものを破壊するでしょう。あなたが他のものを使用しない場合は、それはあなたのために働くはずです – hek2mgl