vimmer には地味に嬉しい機能。
ツールを使うため mac 限定です。
TL;DR
ネットで色々調べていると主に次の2つの方法があるよう。
- Google 日本語入力 を使う
- Karabiner を使う
Esc
キーのかわりに Ctrl + [
キーを使用している人 は2の Karabiner を使った方法がおすすめ。
(というか 1 で実現する方法がわからなかった)
Karabiner の Preferences で private.xml に以下のように記述すると有効になる。
KarabinervimでEsc(Ctrl+)を押した時に自動的に日本語入力モードを解除する
それぞれの方法について、手順を書きます。
1. Google 日本語入力を使った方法
参考:SSHを介してVimを使う人に感動的なESCキーを押すとESCキーが効きつつIMEがオフになる設定(Google日本語入力とVimの相性は最強!) - sifue's blog
Google 日本語入力の環境設定を開く。
「一般」メニューの「キー設定の選択」にある「編集...」ボタンを押す。
モード:入力文字なし
入力キー:Escape
コマンド:キャンセル後 IME を無効化
問題点
普段 insert mode から normal mode に切り替えるとき Escape キーではなく Ctrl + [ を使っているので、この方法だとだめだった。。。
「入力キー」に Escape キーのかわりに Ctrl + [ を割り当てて試してみたけどうまくいかず。
2. Karabiner を使った方法
参考:[Mac] Vimのインサートモードを抜けるときにIMEをオフにするKeyRemap4MacBookのprivate.xml設定 | memobits
Karabiner の Preferences... を開く。
上部の「Misc & Uninstall」を選び、「Open private.xml」を押す。
押すと、Finder で private.xml という設定ファイルのディレクトリが開かれるので
適当なエディタでこのファイルを開き、以下を入力する。
KarabinervimでEsc(Ctrl+)を押した時に自動的に日本語入力モードを解除する
保存したら再度 Preferences... から「Change Key」を選び、
Leave Insert Mode with EISUU...
という項目(XML の list > item > name に指定した値)に ✔ を入れる。
これで OK。
private.xml について補足
今回の private.xml では、
「iTerm2 または MacVim を使用している場合のみ、
- Esc キーを Esc キー→英数キーに
- Ctrl + [ キーを Ctrl + [ → 英数キーに
それぞれ置換する」という設定を行っている。
private.xml の書き方についてはここにリファレンスがある。
https://pqrs.org/osx/karabiner/xml.html.ja
<item>
xml の最小構成としては以下のように、<item>
タグの中に <name>
、<identifier>
、<autogen>
タグを記述する。
<?xml version="1.0"?> <root> <item> <name><!-- 任意の名前。Change Key の項目に表示される --></name> <identifier><!-- ユニークなID。標準設定との衝突を避けるため private. をつけるのを推奨 --></identifier> <autogen><!-- コマンド定義 --></autogen> </item> </root>
一番重要なのは <autogen>
タグで記述するコマンド定義。
__keyToKey__
というシンタックスの後に KeyCode を記述することで、任意のキーを別のキー入力に置き換えることができる。
たとえば、以下は Space キーを Tab キーに置換する。
<autogen>__KeyToKey__ KeyCode::SPACE, KeyCode::TAB</autogen>
KeyCode の一覧はここにある。
https://github.com/tekezo/Karabiner/blob/version_10.8.0/src/bridge/generator/keycode/data/KeyCode.data
また、特定のキーの KeyCode を調べるには以下の記事を参考に Karabiner のデバッグモードを ON にし、システムログファイルを参照すればいいらしい。
Karabiner の private.xml 設定方法 - Qiita
<appdef>
設定を特定のアプリケーションに対してのみ適用したい場合、<appdef>
タグに対象のアプリケーション情報を定義する。
<appdef> <appname><!-- アプリケーション名。<item>の<only>タグで使う --></appname> <equal><!-- アプリケーション ID --></equal> </appdef>
<equal>
内に記述するアプリケーション ID については、次のように取得する。
メニューの「Launch EventViewer...」を開く。
「App」を開く。
この状態で対象のアプリケーションを開く(または起動中の場合は選択する)と、
テーブルに情報が表示されるので「Application Bundle Identifier」の部分をコピーする。
最後に、<appdef>
の <name>
に記述したアプリケーション名を <item>
の <only>
タグ内に書けば OK。
おわりに
この設定のおかげで vim で文章書いてる時のストレスがかなり減った気がします。
普段から Karabiner を使っている人は Karabiner による方法でいいんじゃないでしょうか。
xml の中身をわかってなくてもとりあえず↑の内容をコピペすればいけますし。