2017-02-05

vimでescキーが遠い。合わせて変更ノーマルモード時IMEを自動的にoffに。

escキーからエスケープ

世の悩めるvimmerのために今日はescキーの改善の記事を書きます。
vimはノーマルモードとインサートモードを行き来するのにescキーを多用します。おそらく、vimに慣れてくるとノーマルモードでいる時間が長くなります。とりあえずescキーを叩けば、いつでも次のアクションへの準備ができた!という心構えができます。


しかし、指がなかなかescキーまで届かない。
viが使われ始めた当時の端末機では最善のキーの選択だったのでしょうが、最近のキーボードでは、遠く小さなキーになっています。最新MacBook Proにいたっては、escキーが液晶画面(Touch Barタッチバー)になってしまい、物理キーですらなくなっています。これはvimmerには大問題のようですね。
しかし、そこはvimmer。様々な方法を用いて、escキーの問題改善に取り組む情報が豊富にあります。

CUIのvimやneovimで

.vimrcやinit.vimに書かない方法で解決します。
iTermのキーカスタムで、escキー信号をを他のキーからも出せるようにする方法です。簡単ですのでお試しください。これは、仮想端末上でCUIのvimまたはneovimを利用する場合に限ります。
iTerm2 > Preferences > Keys > [+]
今回は、Cmd + . (コマンドピリオド)に割り当てました。
Send Hex Code : 0x03
0x03はescキーを意味します。
この設定を用いてもescキー自体はこれまで通り使えます。少しずつ指を長くする訓練も可能です。
また、もともとvimにはescキーの代用キーがあります。Ctrl + [ です。



日本語モードの問題も解決する

escキーでノーマルモードにするということは、その後の受付は、英数文字に限るということになります。しかし、コマンドを日本語入力モードのままで入力していまって、_| ̄|○というのはよくあることです。ノーマルモード切り替えと同時に英数モードにする方法も環境によっていくつも存在します。kaoriyaなどのgvimを利用されている方は、設定一つで自動化されます。今回はCUI用なので私はIMEを『Google日本語入力(Google Japanese IME)』に変えて、その設定でこの問題を解決しようと思います。インストール方法はGoogleで検索。
ひらがな(Google) > 環境設定… > Keymap style > Customize
でNew entryで6つつくり、全部をCancel and deactivate IMEにします。
下図を参考にしてください。


これで、escキーでノーマルモードに戻る際にIMEを自動的にoffにします。(英数モードになるということ)そのままコマンドを送ることが出来るようになります。
しかし、上記で設定したCmd + . (コマンドピリオド)やCtrl + [ではノーマルモードにはなるものの、、、、IMEはoffになりません。
この問題を解決するためにいろいろ情報を探しました。

karabinerを利用する ☓ キーリマップの主流であるがosx sierraでは動かない(2017.2.6現在)
karabiner=KeyRemap4MacBook
https://pqrs.org/osx/karabiner/

keyhacを利用する ○ 
https://sites.google.com/site/craftware/keyhac-ja

BetterTouchToolを利用する △ 有料です
https://www.boastr.net/

⌘英かなを利用する ◎
https://ei-kana.appspot.com/

今回は⌘英かなを利用します。
このアプリは、未署名アプリのため、インストール後起動するのにシステム環境設定のセキュリティとプライバシーからアプリを開く許可を出す必要があります。その後、プライバシーパネルからコンピュータの制御にも許可を出さなくてはなりません。自己責任でお願いします。インストール詳細は作者さんのページでご確認ください。

このアプリは、キーをリマップします。もともとUSキーボードに英数かなキーを割り当てるのを目的につくられたようですが、色々と応用ができます。
図のようにCmd + . (コマンドピリオド)やCtrl + [をescキーとして使えるようにしました。これで、escキーを受け取ったGoogle Japanese IMEが自動的にoffになります。

おまけ

OSの純正機能を利用する △ 特定のキーの変更のみ capsキーをescキーにする
https://www.jeffgeerling.com/blog/2016/remapping-caps-lock-key-escape-macos-sierra
単純に、使用頻度の低いcapsキーをescキーとして利用するにはこの方法が一番カンタンです。ノーマルモード切り替え時にIMEをoffにする機能も有効です。

これら全部を利用すると
esc
Cmd + . 
Ctrl + [
caps
の4つの方法でノーマルモードに切り替えることが出来るようになります。いずれもIMEの自動offも連動します。今のところとっても快適です。

(追記 重要)
Cmd + .
このキーの組み合わせをカスタマイズで利用すると、Finder上で不都合が生じます。
記事にしました。こちらをご覧ください。
http://pyrotechnic-webapp.blogspot.com/2017/02/blog-post.html