2016-02-03 10 views
7

私たちが探しているのは、ノーマルモードでvim編集の影響を受けた部分を視覚的に点滅させることです。我々は//line to be deletedddを行う場合たとえば、編集用に視覚的な効果がありますか?

if (true) { 
    //line to be deleted 
} 

を編集する場合、この患部は、削除する前に、我々はVdを使用して行うことができます同じようにフラッシュする必要があります。私たちが探しているのは、を使ってVdと同じ効果です。これは、c,yなどの編集作業すべてに有効です。

nnoremap dd Vdとマッピングしてみましょう。このようにマップする必要があるかどうかはわかりません。

グーグル検索では満足できるものは見つかりませんでした。そこに知られているプラ​​グインはありますか? vimにプラグインできるコードもあれば偉大になります

+0

'Vd'の何が問題なのですか? – hek2mgl

+0

余分なキーストローク以外は何もありません。すべての編集コマンドに対して 'v/V 'を押すたびにかなり重くなります。 – dlmeetei

+0

あなたは 'nnoremap y V'、' nnoremap d V'などと言うことができます。しかし、これは他のものを破壊するでしょう。あなたが他のものを使用しない場合は、それはあなたのために働くはずです – hek2mgl

答えて

5

私が与えた例では多くのことを微調整する必要がありますが、あなたの問題を解決する良いスタートになるかもしれません。

関数の実行中に、: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コマンドは単語の後のスペースを削除しませんが、私の例はそうです。

これらの新しい問題についてはいくつか解決策があるかもしれませんが、今は何もありません。

+0

ありがとう@yolenoyer。評価してあなたに戻ってきます – dlmeetei

関連する問題