Vimで日本語を使っていると、 Normalモード切り替えた後も日本語入力状態になっていて コマンドが効かなくてイライラする事があります。
そのようなイライラを無くすためにEsc等を押して Normalモードに移行する際に必ずIMEをOFFにするような操作を 色々な方法で実現することが出来ますが、 MacではKarabinerを使ってそれを実現していて、 Karabinerが使えないmacOS Sierraではちょっと困っています。
なんとか出来ないかな、ということで取り敢えず AppleScript+BetterTouchToolでやってみました。
Vimでノーマルモード移行時に必ずIMEをOFFにする設定
上のポストにまとめてありますが、 基本、MacではKarabiner、WindowsではAutoHotKeyを使ってコレを実現しています。
GVimとかだとアプリの機能そのものでできたりもします。
MacでAppleScript+BetterTouchToolでやる方法
ところがmacOS SierraではKarabinerがまだ使えないのでこれが使えません。
とりあえずこの設定無しで使ってましたが、 今までIME ONでもすぐにCtrl-[/Escなどでノーマルモードに入るくせが付いてるため 逆に前以上にストレスが溜まる状態になっています。
そこでなんとかしてみようと、やってみたのが AppleScriptとBetterTouchToolの組み合わせ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
こんな感じのAppleScriptを用意。
IMEの状態はメニューバーにあるIMEのアイコンから情報がとってこれます。
とりあえず、日本語入力状態だと、Macの日本語入力だとひらがな、
Google日本語入力だとひらがな (Google)となるので
ひらがなから始まる場合にはIME ONだとします。
他のIMEを使っていて違う名前になる場合には適当に
JP_LIST
に付け加えてあげれば使えます。
基本、最前面にあるウィンドウを対象にして、もしIMEがONである場合、 Esc、EISU、Escを送り、 OFFならEscだけ送ります。
ON時にEscを一度最初に送るのは 変換中であってもキャンセルして英数状態にするためです。
これをBetterTouchToolのKeyboard設定で、 Ctrl[ にControlling Other ApplicationsOpen Application / File / AppleScript で割り当てます。
これでVimでインサートモードで日本語入力している時に いきなり Ctrl[を押してもIMEはOFFの状態になり ノーマルモードに入れます。
ちょっと使ってみて、とりあえず動くことは動くんですが、 いくつか問題が出てきました。
まず、AppleScriptで
key code
によって送られるキー入力はBetterTouchToolが受け取って解釈するため、
このスクリプトをEsc自体に割り当ててしまうと
無限ループに入ってしまってフリーズします。気をつけてください。
もし、Escを押した時にこの動作を実現したいのであれば、
key code 53
を全てkey code 33 using {control down}
に書き換えてBetterTouchToolでEscに割り当ててください。
特にこの場合にはApplicationでiTermやTerminalのみの場合にした方が良いと思います。
両方設定してしまうとお互いに行き来する無限ループに入るのでどちらかしか設定できません。
さらなる問題点として、AppleScriptによるキー入力はちょっと時間がかかってしまうので、 Ctrl[入力後にすぐに何か打つと それが入力されてしまうことがあります。 一瞬待たないといけない。
さらに、Ctrl[を素早く2回続けて押してしまうと 以後しばらくこのキー入力が効かなくなってしまうことがあります。 前のスクリプト起動中に次のスタートすると問題なのかなんなのか、 イマイチよく原因が分かりません。
また、上のスクリプトで IMEがOFFの場合をわざわざ分けてEscだけを送るようにしているのは GNU Screenでコピーモードに入るのに Ctrl[を使いたいからですが、 AppleScriptを通してキーを送るとPrerixキーを送ったことがキャンセルされてしまうのか 上手く動作しませんでした。
ということで、とりあえず形としては出来るものが出来ましたが、 上にあげた問題があると逆にストレスが溜まることが多くなったので 使うのを辞めました。
使い方によってはこれでも便利な人もいるかも。
が、やはりKarabiner-Elements でのKarabiner並の設定が出来る日が来るの が待ち遠しい所です。
追記: 2017/03/10
ちょっと違う方法でまた試してみました。
ここで試した方法よりは上手く行っています。
追記ここまで