3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

vim-sandwich をデフォルト以外のキーマップで使う(surround.vimに合わせたキーマップにする)

Last updated at Posted at 2020-12-02

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) のリマップ

dscs

ハマりポイント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 より副作用もなくわかりやすい効果エフェクトもついてるのでその上位互換と言えるでしょう。

  1. 括弧やクォートをすべてomap ibab でテキストオブジェクトとして選択する機能

  2. リピータブルにしたりカウントに対応するために色々やっているのだろう。plugin/sandwich.vim からの引用。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?