machakann/vim-sandwich は便利ですが、デフォルトのキーマップが s
なのはいただけません。
そういうわけで、tpope/vim-surround に合わせたキーマップに置き換えます。
デフォルトキーマップの無効化
ハマりポイント1:
デフォルトキーマップを無効化するための変数は3つ用意されていて、とりあえず今回のケースでは2つの変数を設定しなければいけません。
let g:sandwich_no_default_key_mappings = 1
let g:operator_sandwich_no_default_key_mappings = 1
はじめ g:sandwich_no_default_key_mappings
だけしか設定せずに「オイ全然無効化しねェぞ!どうなってんだァコレェ!!」って使用を中断したクチです。
ちなみにこのプラグインには osyo-manga/vim-textobj-multiblock に似た機能1 も提供していて、そのデフォルトマップを無効にするには g:textobj_sandwich_no_default_key_mappings
も設定しないといけません。
vim-surroundライクなキーマップの設定
囲いを追加(vim-sandwich のデフォルト sa
) のリマップ
ys
{motion/textobject}{addition}
vim-surround のヘルプドキュメントに載っている記憶法:
"ys" is "you surround".
たとえばある単語を丸括弧で囲むなら、ysiw(
。
nmap ys <Plug>(operator-sandwich-add)
囲いの削除(デフォルトsd
) と 囲いの置き換え(デフォルトsr
) のリマップ
ds
と cs
へ
ハマりポイント2:
単純に <Plug>(operator-sandwich-delete)
<Plug>(operator-sandwich-replace)
にキーマップするのではなく、以下のような複雑で意味不明なマップにしないと動いてくれません2。
nmap <silent>ds <Plug>(operator-sandwich-delete)<Plug>(operator-sandwich-release-count)<Plug>(textobj-sandwich-query-a)
nmap <silent>cs <Plug>(operator-sandwich-replace)<Plug>(operator-sandwich-release-count)<Plug>(textobj-sandwich-query-a)
と、このように使用までに(デフォルトキーマップを使用したくないのなら)罠があって挫折させられてしまいますが、使い始めると括弧・クォート関係のタイプ量が大幅に減って手放せないプラグインになります。
tpope/vim-surround より副作用もなくわかりやすい効果エフェクトもついてるのでその上位互換と言えるでしょう。