1. Home
  2. Archive
  3. vimで上書きの置換をうまいことやる

vimで上書きの置換をうまいことやる

以下の様なテキストがあって、全てringoに置換したいときに、ringoをyankしてgoriraを削除してringoを貼り付けると、goriaがyankされるのでまたringoをヤンクしないといけなくて面倒なことになります。

ringo

gorira

rappa

pannda

DA PUMP

これをうまくやるために以下のような設定を書いてみました。

nnoremap y "xy
vnoremap y "xy
nnoremap d "xd
vnoremap d "xd
nnoremap c "xc
vnoremap c "xc
vnoremap p "xp
nnoremap <C-p> :<C-u>set opfunc=OverridePaste<CR>g@
nnoremap <C-p><C-p> :<C-u>set opfunc=OverridePaste<CR>g@g@

function! OverridePaste(type, ...)
    if a:0
        silent execute "normal! `<" . a:type . "`>\"xp"
    elseif a:type == 'line'
        silent execute "normal! '[V']\"xp"
    elseif a:type == 'block'
        silent execute "normal! `[\<C-V>`]\"xp"
    else
        silent execute "normal! `[v`]\"xp"
    endif
endfunction

y、d、cでxというレジスタに入れておいて、ビジュアルモードのpと<C-p>に割り当てたオペレーターで置換するときはxのレジスタを使うという感じです。

というのを某勉強会で話したら、いつものごとくkanaさんがすでにプラグイン化しておりました。

kana’s vim-operator-replace at master - GitHub

コメントフォーム

スパムがひどいので一時的にコメントフォーム閉じます。ゴメンナサイ。