2011年12月21日水曜日

【21日目】vim++キーマッピング

vimmerのみなさんこんにちは。@umey111です。
Vim Advent Calendar 2011 もついに21日目です!
キーマッピングは十人十色だと思いますが、他の人のキーマッピングを見るのは、いつも新しい発見がありますね。(jjで抜けるとか、同時押し等々)
なので私も一部晒してみます。

・Esc
VimでEscはいろんな方法がありますが、Escって他のアプリでも結構使いませんか?
なので、私はwinでは、keyswapなどのリマップソフトで半角/全角をESCに割り当てて使ってます。(漢字切り替えは、Shift+Spaceにしてます)
そして、最近購入したMacでは、KeyRemap4MacBookでprivate.xmlに以下を追加し、Ctrl単押しをESCに割り当ててます。
<item>
  <name>Control_L to Control_L</name>
      <appendix>(+ When you type Control_L only, send Escape)</appendix>
  <identifier>remap.controlL2controlL_escapeorg</identifier>
  <autogen>--KeyOverlaidModifier-- KeyCode::CONTROL_L, KeyCode::CONTROL_L, KeyCode::ESCAPE</autogen>
</item>
Ctrl単押しでEscは最初は使いづらいEscされまくりでどうかと思いましたが、今では手放せなくなりました。
winでもAutoHotkeyを使えばいけそうな気がしますがまだやってません。。

・diff時のキーマッピング
vimのdiff使ってますか?私はバリバリお世話になってます!
WinMergeもいいですが、vimのdiffも十分いけてます。
ただ、デフォルトの前後の差分へ移動するキーマッピングが使いづらいので、
shift+jとkに割り当ててます。
diff時のみ動作させるため、少しいろいろする必要があります。
nnoremap <silent> J :call NextDiff()<CR>
nnoremap <silent> K :call Prevdiff()<CR>
function! NextDiff()
  if &diff
    silent normal! ]c
  else
    silent normal! J
  endif
endfunction
function! Prevdiff()
  if &diff
    silent normal! [c
  else
    silent execute ":call ref#K('normal')"
  endif
endfunction
ref.vimを使っているため、Kはref.vimの関数を呼んでます。

・fからのマッピング
fっていい位置にありますよね。ただ、デフォルトの動作はそこまで頻繁に使っていないので、
leader的に使ってます。

nmap <silent> fo :<C-u>Unite -buffer-name=outline outline -no-start-insert -auto-preview<CR>
nmap <silent> fl :<C-u>Unite -buffer-name=line line -start-insert<CR>
fo,fl以外のf動作に支障はありませんので、他にもfaとかfeとか割り当ててしまってよさそうです。

ということでVim Advent Calendar 2011の21日目終わります。
明日は、@nishikawasasakiさんです。


参考
keyswap
KeyRemap4MacBook
AutoHotkey