キーを押す回数で挿入文字が変わるというvimプラグインを試してみました。
設定を見れば分かりやすいと思うのですが
例えば下記のようにvimrcに書くと
inoremap <buffer> <expr> = smartchr#loop(' = ', ' == ', '=')
=1回で「 = 」(スペース有りイコール)
=2回で「 == 」(スペース有りイコール2つ)
=3回で「=」(スペース無しイコール)
というように挿入されます。
しかもループされるので、4回押すと「 = 」となります。
お試し方法
インストール
githubにも置かれているので、submoduleで入れます。
git submodule add https://github.com/kana/vim-smartchr.git vim/bundle/vim-smartchr git submodule init git submodule status
submoduleの管理はこちら。
vimプラグインをgitのsubmoduleで管理 - うんたらかんたら日記
vimプラグインの管理 - うんたらかんたら日記
設定
とりあえず下記設定にしました。
"smartchr inoremap <buffer> <expr> = smartchr#loop(' = ', ' == ', '=') inoremap <buffer> <expr> <S-=> smartchr#loop(' + ', '+') inoremap <buffer> <expr> - smartchr#loop(' - ', '-') inoremap <buffer> <expr> , smartchr#loop(', ', ',') inoremap <buffer> <expr> . smartchr#loop('.', '<%= %>', '<% %>')
カスタマイズしたい
最後のとこerb修正時に楽にならないかと思って追加したんだけど
inoremap <buffer> <expr> . smartchr#loop('.', '<%= %>', '<% %>')
カーソル位置を戻したいと思って
こんな感じで書けないかと思ったがダメだった。
inoremap <buffer> <expr> . smartchr#loop('.', '<%= %><LEFT><LEFT><LEFT>', '<% %><LEFT><LEFT><LEFT>')
じゃ、カスタマイズするかとチャレンジしてみましたが挫折。vimscript難しいなぁ。
#.vim/bundle/vim-smartchr/autoload/smartchr.vim function! smartchr#_expand(loop_p, args) "{{{2 let last_arg = a:args[-1] if s:context_p(last_arg) let context = last_arg let _literals = a:args[:-2] else let context = s:DEFAULT_CONTEXT let _literals = a:args endif if a:loop_p let literals = _literals + [_literals[0]] else let literals = _literals endif if s:in_valid_context_p(context) for i in range(len(literals) - 1, 1, -1) let literal1 = literals[i] let literal2 = literals[i-1] if s:cursor_preceded_with_p(literal2) return (pumvisible() ? "\<C-e>" : '') \ . repeat("\<BS>", len(literal2)) \ . literal1 endif endfor return literals[0] else return get(context, 'fallback', _literals[-1]) endif endfunction
\
\
試行錯誤してみましたがvimscriptに疎いので、できませんでした。
いい方法があれば、どなたか教えてください。