update at 2026-07-15 11:10:25

This commit is contained in:
douboer
2026-07-15 11:10:25 +08:00
parent aeade0f813
commit 0adb4b88c5
8 changed files with 402 additions and 523 deletions

View File

@@ -4,219 +4,95 @@
---
## v2.3.1 - 2026-07-15
### 原生 Vim 插件Hammerspoon 稳定方案
本版本更新的是原生 Vim 插件 `vim-im-switch-select.vim`。Obsidian 插件逻辑不变。
#### 改进
- macOS 原生 Vim 插件改为 Hammerspoon 优先:
- Normal / Esc 使用 `hs.keycodes.setLayout("ABC")` 切到英文。
- Insert 恢复中文时使用 `hs.keycodes.setMethod("Pinyin Simplified")`
- `im-select` 仅作为 fallback。
- 修复 Apple 拼音可能出现的状态不一致问题:
```text
sourceID = com.apple.inputmethod.SCIM.ITABC
layout = ABC
method = Pinyin Simplified
```
该状态下菜单栏可能显示中文,但实际仍输入英文。
- Insert 模式支持同一 Vim 进程内状态记忆:
- Insert 中使用中文,`Esc` 后再进入 Insert 恢复中文。
- Insert 中手动切英文,`Esc` 后再进入 Insert 恢复英文。
- 记录已知限制:退出 Vim 后状态不持久化,重新打开 Vim 后首次 Insert 默认中文。
#### 文档
- 重写 README明确当前稳定策略。
- 补充 Obsidian 插件说明:仍使用 `fcitx-remote`,未改为 Hammerspoon。
- 合并 `README-im-select.md` 内容到 README并删除独立文档。
- 更新中英文 README、CHANGELOG、COMPARISON 和 RELEASE。
---
## v2.0.3 - 2025-11-09
### 修复 Normal 模式下按 ESC 触发输入法切换的问题
#### Obsidian 插件
- 修复 Normal 模式下按 ESC 会意外触发输入法切换的问题。
- 只在 Insert 或 Replace 模式下按 ESC 时保存输入法状态并切换到英文。
- Normal 模式下按 ESC 不再改变输入法。
---
## v2.0.2 - 2025-11-04
### 终端兼容性修复
- 修复在 macOS 终端 Vim 中按 ESC 时,子进程输出导致标题栏短暂闪烁的问题。
- 使用更通用的后台静默执行方式替代不兼容的 `job_start(..., {'detach': v:true})`。
---
## v2.0.0 - 2025-11-04
### 新增 Vim 原生插件支持
- 新增原生 Vim 插件支持。
- 支持 Normal / Insert 模式输入法自动切换。
- 支持 Insert 模式输入法状态记忆。
- 增加 Vim 插件安装、配置和调试说明。
---
## v1.0.8 - 2025-01-04
### Obsidian 插件输入法状态记忆
- Obsidian 插件记住退出 Insert 模式时使用的输入法。
- 下次进入 Insert 模式时恢复上次保存的输入法状态。
- 修复首次 ESC 不切英文、Insert 模式正常输入被误触发等问题。
---
## v1.0.0 - 2024-06-01
### 首次发布
- 基本的 Vim 模式输入法自动切换功能
- 支持 macOS 系统
- 支持 Normal/Insert 模式切换
- 基本的 Vim 模式输入法自动切换功能
- 支持 macOS
- 支持 Normal / Insert 模式切换
---
## v1.0.1 - 2024-06-20
### Bug 修复
- 修复了插件加载失败的问题
- 改进了兼容性
---
## v1.0.2 - 2024-07-15
### 性能优化
- 优化了输入法切换的响应时间
- 减少了不必要的命令调用
---
## v1.0.3 - 2024-08-01
### Bug 修复
- 修复了初始化时的异步问题
- 改进了命令执行的错误处理
---
## v1.0.4 - 2024-09-05
### 新增功能
- 添加了对 Linux 系统的支持
- 改进了日志输出格式
---
## v1.0.5 - 2024-10-10
### Bug 修复
- 修复了 Windows 系统下的兼容性问题
- 改进了错误处理逻辑
---
## v1.0.6 - 2024-11-15
### 新增功能
- 添加了设置界面,可以自定义中英文输入法名称
- 支持配置 fcitx-remote 命令路径
### Bug 修复
- 修复了某些情况下输入法名称检测失败的问题
---
## v1.0.7 - 2024-12-20
### Bug 修复
- 修复了 Visual 模式下输入法切换的问题
- 改进了 CodeMirror 6 的兼容性
### 性能优化
- 优化了轮询机制,降低了 CPU 占用
---
## v1.0.8 - 2025-01-04
### 重大更新:输入法状态记忆功能
#### 新增功能
**输入法状态记忆**
- 智能记忆上次输入法状态:插件现在会记住你退出 Insert 模式时使用的输入法(中文/英文)
- 自动恢复:下次进入 Insert 模式时,自动恢复到上次保存的输入法状态
- 支持中英文混合输入场景
**状态管理增强**
- 新增 `lastInsertModeIMStatus` 变量追踪上次 Insert 模式的输入法状态
- 在退出 Insert 模式时,实时检测并保存当前输入法名称
- 在进入 Insert 模式时,根据保存的状态决定是否切换输入法
#### Bug 修复
**修复 ESC 键第一次按下无效的问题**
- 问题:用户首次按下 ESC 键时,输入法不会切换到英文,需要按第二次才生效
- 解决:将键盘事件监听器注册移到 `onload()` 方法中,使用事件捕获模式(`{ capture: true }`
- 效果:现在第一次按 ESC 就能立即切换到英文输入法
**修复 Insert 模式下输入字符触发输入法切换**
- 问题:在 Insert 模式下正常输入文本时,输入 `i`, `a`, `o` 等字符会意外触发输入法切换
- 解决:在 Insert 按键监听器中添加模式检查:`if (this.currentVimMode !== 'normal') return;`
- 效果:在 Insert 模式下正常输入文本不会被干扰
#### 性能优化
**使用事件捕获模式提高响应速度**
- 使用 `addEventListener('keydown', handler, { capture: true })` 代替默认的冒泡模式
- 在事件处理链的最早阶段捕获按键
- ESC 键响应更快,几乎没有延迟
**优化输入法检测逻辑**
- 在 ESC 键处理时,先检测当前输入法再决定是否切换
- 避免不必要的 `fcitx-remote` 调用
- 当前已经是英文输入法时,不会重复切换
#### 技术改进
**多重检测机制**
1. 键盘事件监听(主要)- 使用 capture 模式监听 ESC 和 Insert 按键
2. CodeMirror 事件监听(辅助)- 监听 vim-mode-change 事件
3. 定时轮询(兜底)- 每 100ms 检查一次 Vim 模式
---
## v2.0.0 - 2025-11-04
### 重大更新:新增 Vim 原生插件支持
#### 新增功能
**Vim 原生插件支持**
- 新增 fcitx-osx.vim 插件:为原生 Vim/NeoVim 编辑器提供输入法自动切换功能
- 智能输入法状态记忆:
- 记住退出 Insert 模式时的输入法(中文/英文)
- 下次进入 Insert 模式时自动恢复上次的输入法状态
- 完全无感知切换,无任何 UI 闪烁
- 使用 fcitx-remote -s 命令:
- 通过指定输入法 ID 进行精确切换
- 替代原有的 `-c`/`-o` 开关命令
- 支持自定义英文和中文输入法 ID
- 异步执行优化:
- 使用 Vim 8+ 的 `job_start()` 异步执行命令
- 完全消除输入法切换时的 UI 闪烁和延迟
- 向后兼容旧版本 Vim使用后台进程
**部署脚本增强**
- deploy.sh 更新:一键部署 Obsidian 插件和 Vim 插件
- 自动创建 `~/.vim/plugin/` 目录
- 同时复制两个插件到各自的目标位置
#### 改进
**Vim 插件性能优化**
- 使用 `fcitx-remote -n` 获取当前输入法名称
- 保存完整的输入法 ID 而不是简单的开关状态
- 避免不必要的输入法切换(相同输入法时跳过)
- 所有输出重定向到 `/dev/null`,确保静默执行
#### Bug 修复
- 修复 Vim 插件中 `fcitx-remote -c` 命令不生效的问题
- 修复标题栏显示 "fcitx-remote" 的闪烁问题
- 修复字符串比较失败(`"2\n" == 2`)的问题
#### 文档更新
- 更新 README.md 和 README_en.md添加 Vim 插件安装说明
- 更新所有文档标题,从 "Obsidian" 改为包含两个插件的描述
- 添加 Vim 插件配置说明和调试方法
---
## v2.0.2
2025-11-04
### 修复
**终端兼容性修复**
- 修复在 macOS 终端vi/vim中按 ESC 时,子进程输出导致标题栏短暂闪烁的问题
- 使用 nohup/background 方式彻底静默化命令执行
- 移除 `job_start(..., {'detach': v:true})` 不兼容选项,改以更通用的后台执行方式
### 文档
- 补充 RELEASE/README 中关于终端下行为的说明
---
## v2.0.3
2025-11-09
**修复 Normal 模式下按 ESC 触发输入法切换的问题**
### 修复
**Obsidian 插件**
- **修复 Normal 模式下按 ESC 触发输入法切换的问题**
- 问题:在 Normal 模式下按 ESC 会意外触发输入法切换(从中文切到英文,再按又从英文切到英文)
- 原因:`handleKeyDown` 函数处理 ESC 键时没有检查当前 Vim 模式
- 解决:增加模式检查,只在 Insert 或 Replace 模式下按 ESC 时才保存输入法状态并切换到英文
- 效果:与原生 Vim 插件行为保持一致Normal 模式下按 ESC 不会改变输入法
### 改进
- 提高了模式检测的准确性
- 优化了 ESC 键的处理逻辑
---
**查看详细更新日志**: [CHANGELOG.md](./CHANGELOG.md) | [CHANGELOG_en.md](./CHANGELOG_en.md)
详细历史见:
- [CHANGELOG.md](./CHANGELOG.md)
- [CHANGELOG_en.md](./CHANGELOG_en.md)