Smart IME
灵感来自 idea 的 Smart Input,用于智能地进行中英输入法的切换。
依赖于 IME and Cursor 插件,所以请先进行该插件的配置,例如可以配置中文输入法时显示为红色光标。
依赖
需要安装 IME and Cursor 与 HyperScopes 插件。
特性
- 检测到前一个字符是中文时自动切换到中文输入法(默认开启,这个特性较为耗电,请仔细甄别是否要开启,以及配置触发间隔时间,默认为 2 秒);
- 在中文后输入一个空格自动切换到英文输入法(默认开启);
- 在英文后输入两个空格自动切换到中文输入法(默认未开启);
- 进入到注释场景时,自动切换为中文输入法,离开时自动切换为英文输入法(参考插件配置里的
comment 相关内容);
- 进入到数学公式时,自动切换为英文输入法,离开时自动切换为中文输入法(参考插件配置里的
markup.math,meta.math 相关内容);
- 离开字符串时,自动切换为英文输入法(参考插件里的
string 相关内容,如果要进入字符串后自动切换成中文可以自行配置);
- 如果当前文档拥有超过 n 个英文字符且没有中文字符,则禁用插件;
- 当然,你也可以在文档中加入一个字符串
DISABLE_SMART_IME (例如在注释块里写这个字符串),只要识别到当前文档有这个字符串,也会在当前文件禁用插件;
- 在 Vim Normal 模式下禁用自动切换,不过目前识别 Vim Normal 模式仅是根据光标状态识别,可能存在 bug。
获取输入法的 key 失败,请检查是否正确设置了 "ObtainIMCmd"
请搜索插件 IME and cursor,并按插件说明进行相应的安装和配置。
切换输入法无法切换光标样式
请使用 shift + space 切换输入法,而不是使用系统自带的快捷键。搜索插件 IME and cursor 查看更详细的说明。
在 remote / SSH / WSL / docker 模式下使用
如果无法在 remote 状态下生效,可以试着先在 remote 删除 Smart IME 以及其依赖的两个插件,然后在 remote 的设置中加入如下设置:
"remote.extensionKind": {
"draivin.hscopes": ["ui"],
"beishanyufu.ime-and-cursor": ["ui"],
"OrangeX4.vscode-smart-ime": ["ui"]
}
再重新安装插件即可。
目前的问题
- VS Code 并没有给出一个很好的 api 来判断终端是否获得了焦点,因此切换到终端时切换到英文输入法的功能暂时无法实现;
- Commit Message 同理,暂时无法实现;
- Vim 模式的支持可以使用 IME and Cursor 里的配置实现;
插件设置
smart-ime.warnDisabled : 是否显示禁用提示
smart-ime.disabledOnEnglishTextOverN : 如果当前文档拥有超过 n 个英文字符且没有中文字符,则禁用插件,默认为 100,值为 -1 时禁用该设置
smart-ime.enableChineseSwitchToChinese : 检测到中文时切换输入法到中文,默认开启
smart-ime.enableChineseSwitchToChineseInterval : 检测到中文时切换输入法到中文的触发间隔,默认 2000 毫秒(即两秒)
smart-ime.enableChineseAndSpaceSwitchToEnglish : 检测到中文+空格时切换输入法到英文,默认开启
smart-ime.enableEnglishAndDoubleSpaceSwitchToChinese : 检测到当前行前有中文,且光标前面是非中文+双空格时切换输入法到中文并删掉一个空格,默认关闭
smart-ime.enterScopesSwitchToChinese : 进入某些 scopes 时切换输入法到中文,用逗号分割,前缀匹配,请使用 Developer: Inspect Editor Tokens and Scopes 查看当前位置的 scopes
- 例如这里默认配置了
comment 就可以实现进入注释块时切换到中文输入法的效果
- 如果配置了
comment,string ,就可以匹配 Python 的 comment.line.number-sign.python (注释)和 string.quoted.single.python (字符串),请使用 Developer: Inspect Editor Tokens and Scopes 命令查看 scopes
smart-ime.enterScopesSwitchToEnglish : 进入某些 scopes 时切换输入法到英文,用逗号分割,前缀匹配
- 例如这里默认配置了
markup.math,meta.math 就可以实现进入数学公式(markdown 和 latex)时切换到英文输入法的效果
smart-ime.leaveScopesSwitchToChinese : 离开某些 scopes 时切换输入法到中文,用逗号分割,前缀匹配
- 例如这里默认配置了
markup.math,meta.math 就可以实现离开数学公式(markdown 和 latex)时切换到中文输入法的效果
smart-ime.leaveScopesSwitchToEnglish : 离开某些 scopes 时切换输入法到中文,用逗号分割,前缀匹配
- 例如这里默认配置了
comment,string 就可以实现离开注释块和字符串时切换到英文输入法的效果
smart-ime.disabledOnVim : 在 Vim Normal 模式下禁用自动切换,不过目前识别 Vim Normal 模式仅是根据光标状态识别,可能存在 bug
- 优先级是 优先英文切换 和 优先进入切换
| |