Insert モード中のカーソル移動
Insert モード中にカーソル移動をしたい場合,以下のようなキーマップを設定すると,CTRL-l
で undo を分割せず右へ移動できます.
inoremap<C-l><C-g>U<Right>
lexima.vim による括弧の自動補完
lexima.vimは,閉じ括弧を自動で入力してくれるプラグインです.
しかし lexima.vim で括弧の補完をしている場合,上記の CTRL-l
で閉じ括弧から抜けると,undo が分割されてしまうことがあります.
例えば, cgn
で変更中に lexima.vim で補完された括弧から抜けるため CTRL-l
を押した場合,ドットリピートで変更を繰り返すことが出来なくなってしまいます.
lexima.vim の括弧補完を cgn
で使うためのキーマップ
cgn
で lexima.vim の括弧補完とカーソル移動を含む変更を,ドットリピートで繰り返すためのキーマップが以下になります.
inoremap<C-l><C-r>=lexima#insmode#leave(1,'<LT>C-G>U<LT>RIGHT>')<CR>
以下の gif のように,ドットリピートでも補完された括弧がちゃんと入力されます.
lexima.vim では,閉じ括弧を補完した後に同じ閉じ括弧を入力すると,重複せずに括弧の外にカーソルが移動する機能を持っています.
Before Input After
------------------------------------
(|) ) ()|
(lexima.vim の READMEより引用)
紹介したキーマップはこの機能を利用して <C-l>
を入力した際に,以下のような条件に応じた移動を実現しています.
- カーソルの右隣が lexima.vim で補完された閉じ括弧の場合
lexima#insmode#leave()
でカーソルを移動
- それ以外の場合
<C-g>U<Right>
で移動
注意点
lexima#insmode#leave()
は help に載っていないため,将来的にこの手法が使えなくなる可能性があります.
環境
- MacVim 8.0.46
- lexima.vim v1.2