update at 2026-07-06 14:20:29

This commit is contained in:
douboer
2026-07-06 14:20:29 +08:00
parent 58179424cf
commit 995d672f4a
3 changed files with 114 additions and 135 deletions

View File

@@ -20,9 +20,9 @@
## 功能特性
**自动切换输入法**:在 Normal 模式和 Insert 模式之间切换时自动切换输入法
**智能状态记忆**:记住上次 Insert 模式的输入法状态,下次自动恢复
**异步处理**:使用 `job_start()` 异步执行,避免 UI 阻塞
**中英混合友好**:完美支持中英文混合输入场景
**提前保存状态**:使用 `InsertLeavePre` 在离开 Insert 前保存输入法状态
**异步静默处理**:使用 `job_start()` 异步执行,并屏蔽命令输出,避免阻塞和乱码
**macOS 稳定恢复**:进入 Insert 后延迟恢复中文输入源,并进行一次兜底重试
## 安装要求
@@ -89,11 +89,9 @@ Plug 'yourusername/vim-im-switch', { 'rtp': 'vim-im-switch-select.vim' }
" 英文输入法 ID默认值
let g:imselect_english_im = 'com.apple.keylayout.ABC'
" 中文输入法 ID可选,插件会自动检测
" 例如:搜狗输入法
" let g:imselect_chinese_im = 'com.sogou.inputmethod.sogou'
" 例如:系统自带简体拼音
" let g:imselect_chinese_im = 'com.apple.inputmethod.SCIM.ITABC'
" 中文输入法 ID默认值:系统自带简体拼音
" macOS 更新后建议显式配置,不依赖自动检测
let g:imselect_chinese_im = 'com.apple.inputmethod.SCIM.ITABC'
```
### 如何获取输入法 ID
@@ -117,15 +115,17 @@ im-select
插件安装后会自动工作,无需手动操作:
1. **进入 Insert 模式** (`i`, `a`, `o` 等)
- 自动恢复上次保存的输入法状态
- 延迟切换到中文输入法
- 约 200ms 后再次确认中文输入法,降低 macOS 状态未刷新导致的偶发失败
2. **退出 Insert 模式** (`ESC`)
- 保存当前输入法状态
- 自动切换到英文输入法
- `InsertLeavePre` 提前保存当前输入法状态
-`InsertLeave` 自动切换到英文输入法
3. **中英文混合输入**
- 插件会记住你每次退出 Insert 模式时的输入法
- 下次进入时自动恢复
3. **macOS 行为说明**
- `im-select` 控制的是 macOS 输入源 ID
- 新版 macOS 中文输入法可能存在“图标为中文但内部仍输入英文”的状态
- 当前稳定版不模拟 `Ctrl-Space` / `Caps Lock`,避免快捷键被 Vim 接收导致退出 Insert 模式
## 测试
@@ -161,7 +161,8 @@ im-select
7. 按 `ESC` 退出到 Normal 模式
8. 再次按 `i` 进入 Insert 模式
- 观察输入法是否保持英文
- 当前稳定版会恢复到配置的中文输入法
- 如果需要保持英文,请临时禁用插件或调整 `g:imselect_chinese_im` 策略
## 调试
@@ -219,8 +220,21 @@ im-select
### 输入法切换延迟
- 这是正常的,因为使用了异步处理
- 通常延迟小于 100ms不影响使用
- 这是正常的,因为进入 Insert 后使用了 `timer_start()` 延迟恢复
- 当前稳定版会在进入 Insert 后约 80ms 切中文,并在约 200ms 后兜底确认
- 如果机器较慢或 macOS 状态刷新较慢,可以在插件中适当调大延迟值
### 输入法图标是中文但实际输入英文
这是新版 macOS 中文输入法可能出现的内部状态问题:`im-select` 已经把输入源切到中文,但中文输入法内部仍处于英文输入状态。
当前稳定版采取的处理方式:
1. 不模拟 `Ctrl-Space`、`Caps Lock`、`Shift` 等按键,避免这些按键被 Vim 接收后影响模式。
2. 进入 Insert 后延迟切换中文输入源。
3. 再进行一次中文输入源兜底确认。
如果仍偶发出现该问题,优先调整延迟时间,不建议重新加入系统快捷键模拟。
### 输入法 ID 不正确