unite では
で、action に対するショートカットを設定するには例によって FileType unite で以下のようにする。
" after/ftplugin/unite.vim nnoremap <silent> <buffer> <C-k> :<C-u>call unite#mappings#do_action('right')<CR> inoremap <silent> <buffer> <C-k> <ESC>:call unite#mappings#do_action('right')<CR>
…うむ。長い。何よりノーマルモードと挿入モードで割り当て先を変えないといけない。大半の人はコピペするだろうけど、初心者には分かりづらい。
なので、私は以下のような関数を定義した。
function! s:do(action) return printf("%s:\<C-u>call unite#mappings#do_action(%s)\<CR>", \ (mode() ==# 'i' ? "\<ESC>" : ''), string(a:action)) endfunction
これで、
nnoremap <silent> <buffer> <expr> <C-j> <SID>do('below') inoremap <silent> <buffer> <expr> <C-j> <SID>do('below')
こんな風にできる。ちょっと短くなった。何より両方とも同じマッピングでわかりやすい。
この程度の関数は unite 本体に欲しいところ。名前は何でもいいんだけど、短い方が嬉しいので例えば unite#do() とか*1。無限に増える action に下手に
追記: unite#do_action() として取り込まれました!
http://github.com/Shougo/unite.vim/commit/4a6eddca83d623aa3ccb681ee19b02c433d5fb8b#L0R110
*1:これだと関数名から意味がわからんが、短さ優先で。