Posted at

Vimで挿入モードから抜ける時に英数入力に切り替える

More than 5 years have passed since last update.

開発にMac book使ってるのでMacでの話です。

Vimでコマンドモードに戻る時にかな入力だと具合が悪いので、

方法がないかとググったら、KeyRemap4MacBookを使う方法が見つかったんだけど、

自分のしたい設定にするのには、いくつか情報が足らなかったのでメモ。


何がしたかったか

自分がしたかったのは、

ESC と Ctrl+C と Ctrl+[ 全部に適応したい。

Terminal と MacVim と Sublime など、vimのkeybindなものに適応したい。

ググって見つかるのは、

ESC と Ctrl+C に適応

Terminal にのみ適応

でした。

普通に設定をコピって適当に書き換えればいけると思ったのですが、

ちょっと追加する必要がありました。


何を追加したのか


KeyCodeの追加

今回でいうと、[ の KeyCodeがデフォでいないようだったので追加しました。

(デフォであるかもしれないけどわからなかった。)

<symbol_map type="KeyCode" name="[" value="0x1e" />

EventViewerというウィンドウを立ち上げて、

keyboardを適当にタイプすると、Eventの情報を表示してくれます。

その情報のcodeの欄の数値をvalueに設定すると良いです。


アプリ定義の追加

<appdef>

<appname>SUBLIMETEXT2</appname>
<equal>com.sublimetext.2</equal>
</appdef>

TerminalとVimはあらかじめ定義されていたのですが、

Sublime Text2はさすがに定義されていなかったので追加しました。

KeyCodeの時と同じくEventViewerを開いて、

追加したいアプリをアクティブにすると情報が表示されるので、

CurrentApplicationの文字列をequalタグの値に設定。

他のアプリを追加したい場合は同じように設定してあげればOK。


出来上がった設定ファイル


private.xml

<?xml version="1.0"?>

<root>
<symbol_map type="KeyCode" name="[" value="0x1e" />
<appdef>
<appname>SUBLIMETEXT2</appname>
<equal>com.sublimetext.2</equal>
</appdef>
<list>
<item>
<name>LeaveInsMode with EISUU(vim keybind apps)</name>
<identifier>private.vim_keybind_apps_esc_with_eisuu</identifier>
<only>TERMINAL,VI,SUBLIMETEXT2</only>
<autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
<autogen>--KeyToKey-- KeyCode::[, VK_CONTROL, KeyCode::[, VK_CONTROL, KeyCode::JIS_EISUU</autogen>
<autogen>--KeyToKey-- KeyCode::C, VK_CONTROL, KeyCode::C, VK_CONTROL, KeyCode::JIS_EISUU</autogen>
</item>
</list>
</root>

以上メモでした。