Vimの挿入モード抜けるとき英数モードにするアレ(Karabiner設定例)

Vimの挿入モード抜けるとき英数モードにしたい問題

古代からあるアレです。

我々日本人はVimで日本語を入力することがあるわけですが、そのままノーマルモードに復帰すると、ノーマルモードのコマンドを入力したとき、変換されてしまいンアーッってなるやつです。

この対策として、キーリマップアプリを利用して、EscキーにEsc+英数キーを割り当てるという方法が知られています。

このジャンルではKeyRemap4MacBookというアプリが著名でしたが、現在は改名してKarabinerになっています。

今回、Karabinerの設定がまとまりましたので、記事にしてみます。

private.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0"?>
<root>
<list>
<item>
<name>LeaveInsMode with EISUU(Terminal)</name>
<identifier>private.app_terminal_esc_with_eisuu</identifier>
<only>TERMINAL</only>
<autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
<autogen>--KeyToKey-- KeyCode::N, VK_OPTION, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
<autogen>
__SimultaneousKeyPresses__
KeyCode::J, KeyCode::K,
KeyCode::ESCAPE, KeyCode::JIS_EISUU,
Option::SIMULTANEOUSKEYPRESSES_RAW
</autogen>
</item>
</list>
</root>

only要素でTERMINALを指定した場合、各種ターミナルエミュレータ(で実行されるVim)はもちろんのこと、MacVimでも有効になるようです。

指定内容は以下の通りです。

入力 出力
Esc Esc+英数
⌥n Esc+英数
jk同時押し Esc+英数

徐々にめんどくさくなっていった歴史ともいう。

なお、SimultaneousKeyPressesのオプションをOption::SIMULTANEOUSKEYPRESSES_STRICT_KEY_ORDERにすると、指定した順序で押した場合のみ有効になります。

Key Repeat

ただ、初期設定だと同時押し判定が厳しすぎて押しづらいので調整します。

「Preferences > Key Repeat > Simultaneous Key Presses > Delay Threshold of Key」を50msから200msにしました。

これで、サクッとノーマルモードに復帰できるようになります。