在支持模态文本编辑的编辑器,比如 vim, helix, vscode的vim模式等,在使用 esc
键后会进入默认的普通模式(normal mode),这个时候的操作基本是在英文输入状态下完成操作。再使用 ime 中文输入法的情况下,我们使用esc
后必须切换回英文输入,无疑对模态操作多了一次步骤。这里我们可以在使用esc
时同时切换输入法来解决该问题。
大致的解决办法是:
- cli 切换系统输入法
- 在编辑器中为 esc 配置命令切换为英文
linux gnome4 ibus
IBus 是一款输入法框架。具体使用可以参考 wiki-ibus 。
ibus 提供了工具 ibus engine
查看当前的输入法标识,使用 ibus engine rime
切换输入法为rime。 但在 gnome 4
版本中,该命令无法和gnome-shell
中的系统状态的输入法保持一致。这个时候我们使用一款 gnome-shell-ibus-switcher 插件来解决该问题。
ibus-switcher 为 gnome-shell 42 版本后 提供了利用 d-bus
切换输入法的方式,从而切换系统输入法
ibus-switcher 提供
- 获取当前输入法
org.gnome.Shell.Extensions.IbusSwitcher.CurrentSource
- 切换当前输入法
org.gnome.Shell.Extensions.IbusSwitcher.SwitchSource
比如获取当前输入法
dbus-send --session --type=method_call --print-reply=literal --dest=org.gnome.Shell /org/gnome/Shell/Extensions/IbusSwitcher org.gnome.Shell.Extensions.IbusSwitcher.CurrentSource
因为我使用了 ibus-rime,所以获取到的值是 1|小
(这里的数字是输入法的序号,|
为分隔符,后面跟的是输入法的名称首字母), 1|A
就是 ibus-rime 的英文输入。这个具体看自己的配置情况。
切换输入法到英文
dbus-send --session --type=method_call --print-reply=literal --dest=org.gnome.Shell /org/gnome/Shell/Extensions/IbusSwitcher org.gnome.Shell.Extensions.IbusSwitcher.SwitchSource uint32:1 string:A
这里创建 Python 脚本 ibus-switch.py
#!/usr/bin/python
import subprocess
import os
cmd_read_im = "dbus-send --session --type=method_call --print-reply=literal --dest=org.gnome.Shell /org/gnome/Shell/Extensions/IbusSwitcher org.gnome.Shell.Extensions.IbusSwitcher.CurrentSource"
im = subprocess.run(cmd_read_im, shell=True, capture_output=True, text=True).stdout.strip()
# 检查是否为中文
if (im == "1|小"):
cmd_switch_ibus_a = "dbus-send --session --type=method_call --print-reply=literal --dest=org.gnome.Shell /org/gnome/Shell/Extensions/IbusSwitcher org.gnome.Shell.Extensions.IbusSwitcher.SwitchSource uint32:1 string:A"
subprocess.call(cmd_switch_ibus_a, shell=True)
vscode vim
vscode vim 提供了 Input Method
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "xkb:us::eng",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/ibus engine",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/bin/ibus engine {im}"
vim neovim
neovim 插件 nvim-ibus-sw.
helix
helix 配置文件,打开 hx 后输入 :config-open
, 或者直接编辑 ~/.config/helix/config.toml
。
[keys.normal]
"esc" = [":pipe-to python your-path/ibus-switch.py", "normal_mode"]
[keys.insert]
"esc" = [":pipe-to python your-path/ibus-switch.py", "normal_mode"]
Mac 平台
macism 提供了 mac 平台下输入法切换工具。
通过 brew 安装
brew tap laishulu/macism
brew install macism
helix
[keys.normal]
"esc" = [":sh macism com.apple.keylayout.ABC", "normal_mode"]
[keys.insert]
"esc" = [":sh macism com.apple.keylayout.ABC", "normal_mode"]
window 平台
im-select 提供了 window 平台的输入法切换工具。