cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

arpeggio.vimの設定例

kana/vim-arpeggio · GitHub は同時押しをサポートするプラグイン
設定するには arpeggio#map()関数を使うか、Arpeggiomap コマンドを使う。
ただし、Arpeggiomapコマンドをvimrc内で使うためには、その前に以下の関数を呼ばなければいけない。

call arpeggio#load() "arpeggioをこのvimrc内で有効にする

この関数を呼ばないとvimrc内でarpeggioのコマンドが有効にならない。注意。

設定例 fとjの同時押しにzj、fとkの同時押しにzkを充てたい

コマンドを利用した設定例(vimrcで設定する場合はarpeggio#load()を先に呼ぶこと)

"ノーマルモード
Arpeggionnoremap fj   zj
Arpeggionnoremap fk   zk
"ビジュアルモード(セレクトモードを除く)
Arpeggioxnoremap fj   zj
Arpeggioxnoremap fk   zk

関数を利用した設定例

call arpeggio#map('nx', '', 0, 'fj', 'zj')
call arpeggio#map('nx', '', 0, 'fk', 'zk')

caution!

もしも例えばjに以下のコマンドを充てている場合などはエラーメッセージが表示される。

nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk

Key 'j' is already mapped in mode 'n'
Key 'k' is already mapped in mode 'n'
Key 'j' is already mapped in mode 'v'
Key 'k' is already mapped in mode 'v'

すなわち、arpeggioに使うキーに既にマッピングが充てられていると競合する。これを回避するためにはj kを以下のように迂回してマッピングする。

nmap <Plug>(arpeggio-default:j) <SID>gj
nnoremap <SID>gj gj
nmap <Plug>(arpeggio-default:k) <SID>gk
nnoremap <SID>gk gk
vmap <Plug>(arpeggio-default:j) <SID>gj
vnoremap <SID>gj gj
vmap <Plug>(arpeggio-default:k) <SID>gk
vnoremap <SID>gk gk

(arpeggio-default:{X})はarpeggioに使ったキー{X}の単打を定義するのに使うマップである。
参考:arpeggioとsmartchrを共存する場合の設定サンプル - while ("im the true Vim master"); - vimグループ

なお、同時押し判定がシビアと感じるなら、以下の変数で調整する。

let g:arpeggio_timeoutlen = 80