読者です 読者をやめる 読者になる 読者になる

遅れてきた人によるメモ

遅れてきた人は危険がいっぱい

MacVimでKeyRemap4MacBook使って日本語入力を制御する話

入力キーを変更する方法

入力キーの設定をいじる場合、

  • そのアプリ内の設定で変更する
  • OS標準の設定で変更する

という2種類が基本なわけですが、

  • キー入力を制御するアプリをかまして入力そのものを変化させる

という方法もあります。最後の手段は、本当に最終手段なためあまり好きではないのですが、アプリ内で設定が存在していなかったり、OS標準の設定で変更できない場合のような、にっちもさっちもいかなくなったときに便利なことがあります。MacVimでことえりの制御が難しそうだったのと、OS標準の設定は、アプリとして継承していないと。MacのOS標準の変更する場合はこちら。OS標準の方の変更は、StandardKeyBinding.dictを編集するのが面倒になってきたので、~/Library/KeyBindings/DefaultsKeyBinding.dictを作って、必要なものだけ追加するようにしました。

KeyRemap4MacBook

KeyRemap4MacBookは、入力されたキーを受け取って、それを解釈後、定義にあるキー入力に変更してくれるというもの。Aとタイプしたら、Bを押したように変更してくれるし、B, Cと複数のキーを入力したかのようにもしてくれる。また、特定のアプリ(only)によっては、Dと入力したように振り分けたり、特定のアプリ以外(not)など、割と融通がきいてくれる。他にも、キーを押し続けた際のタメと入力間隔も制御できたり、入力デバイスごとに制御できたりと、独裁者のごとく振る舞うことができます。

MacVim諸々の設定

KeyRemap4MacBookをインストールしたら、右上に四角いマークが表示されます。その「Open KeyRemap4MacBook Preferences...」を選択後、Misc & Uninstallタブに、Custum Setting --> Open private.xml があるので、そこに独自設定を入力すればいいです。private.xmlの書き方は、英語のマニュアルが分かりやすいし、Githubでも作者の方がコードを公開してるので、そこらへんを調べたらよいかと思います。

とりあえず、MacVimで日本語入力(Hiragana入力)になっているとき、escキー or Ctrl-[ をタイプしたら、ノーマルモードかつ英数入力(Romaji入力)になる設定(太字箇所)を作ってみました。

<?xml version="1.0"?>
<root>
  <item>
    <name>Change the Input Method Mod Shift-Ctrl-J, Shift-Ctrl-;</name>
    <identifier>option.IME</identifier>
    <autogen>--KeyToKey-- KeyCode::J, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L, KeyCode::JIS_KANA</autogen>
    <autogen>--KeyToKey-- KeyCode::SEMICOLON, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L, KeyCode::JIS_EISUU</autogen>
  </item>
  <item>
    <name>MacVim Setting</name>
    <identifier>option.MacVim_Setting</identifier>
    <only>VI, TERMINAL</only>
    <autogen>
      --KeyToKey--
      KeyCode::ESCAPE, KeyCode::JIS_EISUU, KeyCode::ESCAPE
    </autogen>
    <autogen>
      --KeyToKey--
      KeyCode::BRACKET_LEFT, ModifierFlag::CONTROL_L, KeyCode::JIS_EISUU, KeyCode::ESCAPE
    </autogen>    
  </item>
  
  <item>
    <name>Vim Keybinding on Mac OS X Mountain Lion</name>
    <identifier>option.Exchange_Ctrl-[_to_ESC</identifier>
    <autogen>--KeyToKey-- KeyCode::BRACKET_LEFT, ModifierFlag::CONTROL_L, KeyCode::ESCAPE</autogen>
  </item>
 
  <item>
    <name>DefaultKeyBindings Emacs on Mac OS X Mountain Lion</name>
    <not>VI, TERMINAL</not>
    <identifier>option.DefaultKeyBindings</identifier>
    <autogen>--KeyToKey-- KeyCode::B, ModifierFlag::CONTROL_L, KeyCode::CURSOR_LEFT</autogen>
    <autogen>--KeyToKey-- KeyCode::N, ModifierFlag::CONTROL_L, KeyCode::CURSOR_DOWN</autogen>
    <autogen>--KeyToKey-- KeyCode::P, ModifierFlag::CONTROL_L, KeyCode::CURSOR_UP</autogen>
    <autogen>--KeyToKey-- KeyCode::F, ModifierFlag::CONTROL_L, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>--KeyToKey-- KeyCode::M, ModifierFlag::CONTROL_L, KeyCode::RETURN</autogen>
    <autogen>--KeyToKey-- KeyCode::H, ModifierFlag::CONTROL_L, KeyCode::DELETE</autogen>
  </item>
 </root>

とりあえず、太字にした箇所が、MacVimで日本語入力がオンになっていた場合。そこだけ抜き出して上書き保存してChange KeyタブのReroadXMLボタンをクリックして読み込むと「MacVim Setting」なる何も考えてなさそうメニューが出てくるのでそこにチェック入れたら即反映されます。ほかのは、OS標準だと Ctrl-[ に :cancelOperation を設定しても、アプリ全てに反映されるというわけではないため escキーに強制的に変換してしまおう、というのとFinderとかでも、Ctrl-n, p, f, bが最低限使えるにようにしたかったのでそういう設定を追加しただけです。KeyRemap4MacBookにもオプションがあるので、そちらを使用する場合は、削除してください。本当は、hjklで移動したいのですが、他のキー押しながら移動することに抵抗があったため、Mac標準でいいや…になりました。ここら辺、このアプリのこの場所では、〜したいみたいなことができないため、不便ですね。

注意事項

アプリで設定できることは極力アプリで設定した方がいいです。また、<only>, <not>がありますが、そのキー入力を完全に変えてしまうものなので、KeyRemap4MacBookでの設定は必要最低限にすべきです。アプリで、〜 is not working! な状態になった場合は、ここの設定が影響している可能性をまず疑いましょう。