空行をレジスタに送らないVimオペレータ作ってみた
dd
で空行を削除したらヤンクしたテキストが上書きされてしまった… なんてことありますよね。
"_dd
でブラックホールに送れば済む話ですが、空行を消すために毎回レジスタ指定するのは面倒くさい。
そんな思いから、空行(空白のみも含む)を削除したときは自動でブラックホールに送ってくれるオペレータ作ってみました。
nmap d <Plug>(operator-blank2void) xmap d <Plug>(operator-blank2void) nmap <silent>dd :exec "normal Vd"<cr> call operator#user#define('blank2void', 'Operator_blank2void') function! Operator_blank2void(motion_wise) abort let v = operator#user#visual_command_from_wise_name(a:motion_wise) if join(getline("'[", "']"), '') =~ '\%^\_s*\%$' execute printf('normal! `[%s`]"_d', v) else execute printf('normal! `[%s`]d', v) endif endfunction
dd
のキーマップが冗長に思えますが、これは選択時のチラツキを無くすためです。