在 VSCode 中使用 VIM 插件写代码时,经常会因为当前在中文输入法下,导致各种奇怪的现象。 例如,
- 切换到 Normal 模式后,按字母键,会出现中文输入法的提示框。
- Normal 模式下,想按下 i 键进入 Insert 模式,结果是在中文输入法下,即输入了奇怪的东西。
非常之不爽,我一度想放弃 VIM 插件,甚至干脆不用中文 🥲,但是,这不现实,因为好多界面需要中文描述。
解决思路
在 VIM 插件退出 Insert 模式时,自动切换回英文输入法。
VSCode VIIM 插件的官方文档里,恰好有相关的配置。参考:
https://github.com/VSCodeVim/Vim#input-method
Input Method: Disable input method when exiting Insert Mode.
配置项
- vim.autoSwitchInputMethod.enable:是否启用自动切换输入法功能。默认值为 true。
- vim.autoSwitchInputMethod.defaultIM:默认的输入法,注意这里 Mac 和 Windows 的配置不一样。
- vim.autoSwitchInputMethod.obtainIMCmd: 获取当前输入法的命令的路径。例如
im-select
,需要安装这个命令行工具。 - vim.autoSwitchInputMethod.switchIMCmd: 切换输入法的命令。需要加上 {im} 占位符,表示目标输入法。
Windows 配置示例
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "1033",
"vim.autoSwitchInputMethod.obtainIMCmd": "D:\\apps\\im-select.exe",
"vim.autoSwitchInputMethod.switchIMCmd": "D:\\apps\\im-select.exe {im}"
im-select.exe 的下载地址
注意,github 上 im-select 的下载地址在这里,项目 readme 里的链接 404。
https://github.com/daipeihust/im-select/issues/72
Windows 下输入法的 ID
在 Windows 下,输入法的 ID 是一个数字。可以通过以下命令获取当前输入法的 ID:
> im-select.exe
1033
> im-select.exe
2052
- 1033 是英文输入法。即英文键盘输入法
- 2052 是中文输入法。即切换到中文输入法,例如,微信输入法。注意,如果在中文输入法下,即便是切换为英文输入,仍然是中文输入法,也是返回 2052。
如何修改配置文件
图形化的配置界面,看不太懂。不如直接修改配置文件,更简单直观。
ctrl + shift + p 打开命令面板,输入 settings.json
,选择 User Settings,开配置文件。
实际就是一个 json 文件。
User Settings 跟 Workspace Settings 的区别是前者是全局配置,后者是当前工作区的配置。
修改后的效果
会发现,只要按下 ESC 键退出 Insert 模式,输入法就会自动切换回英文输入法。 非常完美。
但是,目前还是有一些小瑕疵
- 切换速度还是慢,不敢操作快了
- 如果是切换到英文键盘,再去其他应用里输入中文,还需要切换中英文键盘。我才知道切换中英文输入法的快捷键早已不是 ctrl + space, 而是 win + space。我 out 了
- 不知道为何每次输入中文标点符号时,都会自动输入两个相同的标点符号 😅
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式