vim-insert-point というものを作った

追記

暫定でカスタマイズ可能にした。もっとカスタマイズ方法については練りたい。

let g:insert_point_config.default = [
    \ { 'target': '.)', 'offset': 0, 'direction': 0 },
    \ ]

上記のように記述することで自分の設定を行うことができる。
上記の意味は、

  • target
    • ジャンプしたい定義箇所
  • offset
    • 正規表現でマッチした先頭位置からのオフセット位置(マイナス値で後ろから指定できるようにすごくしたい)
  • direction
    • 通常はいじらなくてよい 1 は next キーマッピングの時だけ有効、0 は next & prev で有効、-1 は prev のみ有効

導入

vim を使っていると括弧を自動入力するキーマッピングを一度は経験すると思う。

inoremap ( ()<Left>

上記のようなやつ。


でも、上記のマッピングだと括弧から抜けるときにノーマルモードに戻るのが面倒臭い。
自分の場合は、.vimrc にゴリゴリ書きまくっていい感じにしていたのだが、
あまりにも雑多になってきたので、今回 すごく適当に プラグイン化した。
この手のプラグインはかなり多いが、こればかりは人それぞれかなーと思うので自作もしょうがない。

インストール

人それぞれかなー とかいいつつ、一応使い方とかを残しておく。
すごく適当に作ってしまったので正直問題が山積み。


上記を取得し、下記のキーマッピングを .vimrc に記述する。

imap <Tab> <Plug>(insert_point_next_point)
imap <S-Tab> <Plug>(insert_point_prev_point)

これで、インサートモードで を入力すると、なんかいい感じにカーソルが移動するようになる。

※ 「 は補完に使ってるんだが・・・」って人は、なりなんなりにどうぞ。
※ 初期設定は結構移動箇所多めの設定にしてある。

カスタマイズ

現状ではカスタマイズできない。
あまりにもナンセンスなのでここは改善する予定。
無理矢理でも改善したい場合は、vim-insert-point/autoload/config/default.vim をいじってください。
ここは近日中になんとかする予定。


※ ちなみに filetype ごとに移動箇所を定義できます。

サンプル

imap <Tab> <Plug>(insert_point_next_point)
imap <S-Tab> <Plug>(insert_point_prev_point)
inoremap [ []<Left>
inoremap { {}<Left>
inoremap ( ()<Left>
inoremap ' ''<Left>
inoremap " ""<Left>

終わりに

この機能をプラグイン化することができたのは自分にとっては結構でかい。
この挙動は結構こだわって作ったので気になる方はぜひ使ってみてください。