按下ESC时让VIM自动切换为英文输入法

  • 思路是用 karabiner 软件,如果当前运行的程序是VIM,那么将ESC映射为:首先执行ESC的功能,然后切换到英文输入法。缺点是当按下 i 进入插入模式时处于英文输入状态,需要打中文的话还需要自己手动切换一次。

  • 新建一个 karibiner 的xml配置文件

    <?xml version="1.0"?>
    <root>
    </root>
  • 在新建的配置文件 root 标签内配置切换输入法、对应的虚拟按键,以及对应的应用名称及ID。更多的详情,可以看官方文档

    <vkchangeinputsourcedef>
    <name>KeyCode::VK_CHANGE_INPUTSOURCE_ICYMIND_ENG</name>
    <inputsourceid_equal>com.apple.keylayout.US</inputsourceid_equal>
    </vkchangeinputsourcedef>
    <appdef>
    <appname>iTerm</appname>
    <equal>com.googlecode.iterm2</equal>
    </appdef>
    <appdef>
    <appname>MacVim</appname>
    <equal>org.vim.MacVim</equal>
    </appdef>
  • 映射ESC

    <item>
    <name>Esc: Esc and Switch to ENG IM</name>
    <identifier>private.esc-esc and switch eng im</idendifier>
    <app_only>Atom, MacVim, iTerm, Xcode, android_studio, Spotlight</app_only>
    <autogen>
    __KeyToKey__
    KeyCode::ESCAPE,
    KeyCode::ESCAPE,
    KeyCode::VK_CHANGE_INPUTSOURCE_ICYMIND_ENG
    </autogen>
    </item>
  • 在private.xml 中 include 刚新建的xml文件:

    <?xml version="1.0"?>
    <root>
    <include path="{{ ENV_HOME }}/Dropbox/Code/Script/karabiner.xml" />
    </root>
  • 最后在 karabiner 中勾选刚配置的选项就好了