前回 のエントリを書いた後、さらに完璧な動作を実現する方法が見つかったのでその方法について。
Google日本語入力+iTerm2な環境
ただし、今回の方法はGoogle日本語入力を使い、かつiTerm2上でのみ完璧に出来ます。
方法はGoogle日本語入力のキー設定をするだけです。
Google日本語入力の環境設定一般タブ キー設定の選択の編集を立ち上げ、 編集ボタンからエントリーを追加を行い、
- モード:入力文字なし
- 入力キー: Escape
- コマンド: キャンセル後IMEを無効化
のエントリーを作ります。
これでiTerm2上でVimを立ち上げ、インサートモードに入った状態でIMEをONにし、 ESCを押すとIMEがオフになった状態でノーマルモードに戻れます。
SSHを介してVimを使う人に感動的なESCキーを押すとESCキーが効きつつIMEがオフになる設定(Google日本語入力とVimの相性は最強!) - しふーのブログ
こちらの記事を見つけて参考にしました。 上の記事では直接入力、入力文字なし、変換入力中、変換中、サジェスト表示中、サジェスト選択中の すべてのモードに関してキャンセル後IMEを無効化を指定していますが、 実際に必要なのは入力文字なしだけです。
変換入力中や変換中に関しては デフォルトでキャンセルの設定が入っています。
何故かデフォルトだと入力キーがESC表示になっていますが。 (上の写真では一度デフォルトの削除してしまったのでEscapeになってます。)
この変換中とかでもキャンセルしてIMEをオフにして一気にノーマルモードに戻したいとも思うのですが、 キャンセル後IMEを無効化を設定してもキャンセルされてIMEがオフの状態で インサートモードのまま残っていました。
どうも変換中にはGoogle日本語入力の方にキーが取られてiTerm2の方までキーが送られて無い状態の様です。
なので、動作的にIMEをオフにするかどうかは好みですが、 デフォルトのままキャンセルにしておきました。
サジェスト表示中とかに限ってはちょっとどのタイミングで効くのか分かりません。 入力初めてサジェストが出てる状態でも変換入力中の状態と同じ?の感じで、 取り敢えず思いつく限りの状況はESCでキャンセル出来るのですが。
あと、直接入力はIMEがオフの状態なので特に指定する必要は無いかと。
追記: 2017/06/30
最近なにかおかしいなと思ったらこの設定が上手く効かない様になっていました。
IMEがオンの状態でESCを押すと変換中とかでなくてもiTermにはESCが送られず IMEがオフになるだけでインサートモードにとどまったままになっています。
macOSのアップデートによるものかGoogle日本語入力の方が悪いのか分かりませんが 上記の環境設定とかも確認してその通りになってますが上手く効きません。
仕方ないのでESC2回押しのくせを付けてるところです。。。
追記ここまで
Macの日本語
Macの日本語入力(旧ことえり?)にはこの様なキー設定が無いので出来ません。
ので、Google日本語入力を使う必要があります。
iTerm2以外での場合
また、このESCを送る方法がアプリのレベルでちょっと違うのか、 iTerm2以外だと違う挙動になります。
まず、ターミナル.appだとESCは単にノーマルモードに戻るだけで IMEの変更が行われません。 変換中のキャンセルとかはESCでGoogle日本語入力に伝わってますが 入力中以外はキーがGoogle日本語入力に届いてない感じです。
これはFirefoxなどでやってみても一緒で、入力欄がある時、 入力欄にフォーカスをあてて、IMEをオンにした状態でESCを押すと フォーカスが外れるのですが、この際IMEはオフになりません。 また、入力欄にフォーカスがあたってない時はIMEは関係ない、ということか ESCを押してもIMEは変更されません。
また、これとちょっと挙動が違うのがMacVim(gvim)で MacVim上ではインサートモードでIMEがオンだと、 一回目のESCでIMEがオフになりインサートモードのまま残ります。 もう一度押せばノーマルモードに戻ります。
これは上の参考エントリでもそういったことが書いてあります。
どうもESCを捉えるにあたって アプリの優先順位やそれを他にも送るのか、などの違いがあるみたいで、 思った通りの動作はiTerm2でしかできませんでした。
これでまた1つiTerm2を使う意味が出来た感じ。
Windowsでは?
この方法はGoogle日本語入力のキー設定を行うので Windowsでも同じような事ができそうなものですが、 Windowsで試してみた所、上に書いたMacVimの様な状態、 つまりインサートモードでIMEがオンな状態でESCを押すと IMEがオフになるだけ。 ノーマルモードに戻りたい場合はもう一度ESCを押す必要があります。
PuTTY、MobaXterm、mintty (Cygwin)等いくつか試しましたがどれも同じでした。
このことも上の参考エントリにも同じような事が書いてあります。
ので、Windowsでは引き続きAutoHotKeyを使った方法でこれを実現しています。
まとめ
今回の方法は特に副作用も無く以前の様に快適に使えています。
この前回の方法だとやはりESCを押してすぐにキーを入力する際に ちょっと変な入力が入ってしまうことがあるので余りよくありませんでした。(ちょっとゆとりを持って打てばいけるのですが。。。)
ちなみに普段VimなどでESCは使わずにCtrl-]を使っていますが、 色々まとめてしまうためにBetterTouchToolでOSレベルで常にCtrl-]がESCになるようにしています。
とうことでmacOS SierraでもやっとまともにVimで日本語を打てる様になりました。 ノーマルモードに以降する寸前にIME変換キーを押してしまう癖が大分ついていますが、 徐々に押さなくても良いんだよ、と体に教えて行きたい次第です。
MacVimでこの方法を使うと2回ESCを打つ必要がありますが、 MacVimでは他の方法もあるので以下を参考に。
追記: 2017/08/31
Karabiner-ElementsとGNU screenの設定を追加することで上手くやる方法を見つけました。
追記ここまで