なっく日報

技術やら生活やらのメモ

MacのVimでESCまたは<C-[>押した際に日本語入力をOFFにしたい(JISキーボード編)

自分向けのメモです。

MacVimあるいはターミナル上のVimでESCAPEまたは<C-[> を押した際に日本語入力をOFFにする方法です。

Karabiner-Elementsを使う

いろいろ調べましたがこれしかなさそう。

brew cask install karabiner-elements

でインストールします。

設定ファイル作成

※ 追記:標準ルールで準備してくれているので設定ファイルを作成する必要はないです。

https://pqrs.org/osx/karabiner/complex_modifications/ (Karabiner-Elements Preferences → Complex Modifications → Add rule → Import more rules from the Internet で開く画面)

の 「For Japanese (日本語環境向けの設定) (rev 3)」 の「escキーを押したときに、英数キーも送信する(vim用)」と「Ctrl+[を押したときに、英数キーも送信する(vim用) (rev 2)」

をインポートするだけでOKでした。

qiita.com

の記事を参考にさせていただきました。

とてもわかり易くてGOOD!

ただし、JISキーボード使っている人やiTerm2使っている人だと動かないので注意が必要です。

自分の場合

~/.config/karabiner/assets/complex_modifications/FromEscapeToJapanese_eisuu.json

を以下の内容で作成しました。

{
  "title": "ESCまたは^[でIMEをOFF",
  "rules": [
    {
      "description": "VimでESCまたは^[を押したときにIMEをOFFにする",
      "manipulators": [
        {
          "type": "basic",
          "from": { "key_code": "escape", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "lang2" }, { "key_code": "escape" } ],
          "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [
            "^com\\.apple\\.Terminal$", "^org\\.vim\\.", "^com\\.googlecode\\.iterm2$" ] } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "close_bracket", "modifiers": { "mandatory": ["left_control"] } },
          "to": [ { "key_code": "lang2" }, { "key_code": "escape" } ],
          "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [
            "^com\\.apple\\.Terminal$", "^org\\.vim\\.", "^com\\.googlecode\\.iterm2$" ] } ]
        }
      ]
    }
  ]
}

あとは、PreferencesのComplex ModificationsからAdd ruleするだけです。

ハマりどころ

Karabiner-ElementsのPreferencesより、Virtual Keyboardを45にしないと入力が変になります(USキーボード扱いされている?)

忘れずに変更しておきましょう。

最後に

なお、GitHubにも設定ファイル上げておきました。

https://github.com/yukidarake/dotfiles/blob/master/.config/karabiner/assets/complex_modifications/FromEscapeToJapanese_eisuu.json