VSCode VIM 插件的中文输入法自动切换

文章目录

    在 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式