如何自动在 Spacemacs evil 进入命令模式时切换至英文输入法

TL;DR 作为 Vim 或者 Spacemacs evil 的中文(或非英文)使用者,经常遇到的一个麻烦,就是在插入模式中时使用中文(或非英文)后,需要进入命令模式时,会出现因为输入法的缘故,无法直接操作,需要先切换输入法至英文状态。这极大的降低来效率。本文将介绍如何在 Spacemacs evil 模式中,实现退出编辑模式时(AKA进入命令模式时)自动切换至英文输入法。

安装输入法控制程序

不同的系统,需要用到不同的输入法控制程序,这里不同系统又不同的输入法控制系统。这里我以 Mac OS 作为示例。你需要安装 issw,具体如何安装,可以参考文献「Command line input source switcher for Mac.」。Linux 用户则不需要安装,系统自带控制程序。

设定 Spacemacs hook

Spacemace Hook 具有强大的功能,参见「Vim/Evil mode command and Russian language auto select」。不同的系统具有不同的设定,具体如下:

针对 Mac

参见 「How to smart switch Rus/Eng mode when use Emacs and Evil mode (or Spasemacs)」

针对 Linux

参见 「Spacemacs on Ubuntu 16.04 - automatically switch between English and Russian layouts on entering and exiting insert state」

==== Update (2020-01-02) ====
似乎 gsettings 不能很好的处理 Rime 输入法,输出的状态和英文的完全一致,导致无法使用。在 「How to change keyboard layout in gnome 3 from command line」的指引下,正好我的 Rime 是使用 ibus 框架的,我使用 ibus 命令来完成切换。我将改动后经过测试的代码发送到了 GitHub Gist 「 https://gist.github.com/howl-anderson/16e1424809393f98df05295d7ebf94ee 」。

参考文献

  1. auto switch input method in MacOS
  2. Command line input source switcher for Mac.
  3. im-select
  4. Vim/Evil mode command and Russian language auto select
  5. How to smart switch Rus/Eng mode when use Emacs and Evil mode (or Spasemacs)
  6. Spacemacs on Ubuntu 16.04 - automatically switch between English and Russian layouts on entering and exiting insert state
  7. How to change keyboard layout in gnome 3 from command line
  8. Automatically switch to English keyboard when leaving insert/replace mode in Evil of Spacemacs. And when you enter insert/replace mode again, switch to whatever input method you used last time. Especially useful when you are using other language (non-english) to write content.