first commit
This commit is contained in:
259
CHANGELOG.md
Normal file
259
CHANGELOG.md
Normal file
@@ -0,0 +1,259 @@
|
||||
# 更新日志
|
||||
|
||||
本文档记录了 Obsidian Vim 输入法自动切换插件的所有重要变更。
|
||||
|
||||
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
|
||||
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
||||
|
||||
[English](./CHANGELOG_en.md) | 中文
|
||||
|
||||
---
|
||||
|
||||
## [1.0.8] - 2025-01-04
|
||||
|
||||
这是一个重大更新版本,引入了输入法状态记忆功能,并修复了多个关键问题。
|
||||
|
||||
### 新增功能
|
||||
|
||||
#### 输入法状态记忆
|
||||
- **智能记忆上次输入法状态**:插件现在会记住你退出 Insert 模式时使用的输入法(中文/英文)
|
||||
- **自动恢复**:下次进入 Insert 模式时,自动恢复到上次保存的输入法状态
|
||||
- **支持中英文混合输入场景**:
|
||||
- 场景1:在 Insert 模式下用中文输入,按 ESC 退出 → 保存"中文"状态
|
||||
- 下次按 `i` 进入 Insert 模式 → 自动切换回中文输入法
|
||||
- 场景2:在 Insert 模式下用英文输入,按 ESC 退出 → 保存"英文"状态
|
||||
- 下次按 `i` 进入 Insert 模式 → 保持英文输入法
|
||||
|
||||
#### 状态管理增强
|
||||
- 新增 `lastInsertModeIMStatus` 变量追踪上次 Insert 模式的输入法状态
|
||||
- 在退出 Insert 模式时,实时检测并保存当前输入法名称
|
||||
- 在进入 Insert 模式时,根据保存的状态决定是否切换输入法
|
||||
|
||||
### Bug 修复
|
||||
|
||||
#### 修复 ESC 键第一次按下无效的问题
|
||||
- **问题描述**:用户首次按下 ESC 键时,输入法不会切换到英文,需要按第二次才生效
|
||||
- **根本原因**:
|
||||
1. 键盘事件监听器注册太晚(在 `onload()` 之后)
|
||||
2. Obsidian 的 Vim 模式在 ESC 事件到达我们的监听器之前就已经处理完毕
|
||||
3. 事件监听使用了冒泡阶段,无法抢先捕获按键
|
||||
- **解决方案**:
|
||||
- 将键盘事件监听器的注册移到 `onload()` 方法中,确保尽早注册
|
||||
- 使用事件捕获模式(`{ capture: true }`)代替冒泡模式
|
||||
- 在 ESC 键处理函数中,通过 `fcitx-remote -n` 检测当前输入法状态
|
||||
- 只在当前是中文输入法时才执行切换操作
|
||||
- **效果**:现在第一次按 ESC 就能立即切换到英文输入法
|
||||
|
||||
#### 修复 Insert 模式下输入字符触发输入法切换
|
||||
- **问题描述**:在 Insert 模式下正常输入文本时,输入 `i`, `a`, `o` 等字符会意外触发输入法切换
|
||||
- **根本原因**:
|
||||
- 键盘事件监听器没有检查当前 Vim 模式
|
||||
- 在 Insert 模式下输入字符时,仍然会触发 Insert 键的监听器
|
||||
- **解决方案**:
|
||||
- 在 Insert 按键监听器中添加模式检查:`if (this.currentVimMode !== 'normal') return;`
|
||||
- 只在 Normal 模式下才响应 Insert 按键
|
||||
- 在 Insert 模式下,字符输入不会触发任何输入法切换逻辑
|
||||
- **效果**:在 Insert 模式下正常输入文本不会被干扰
|
||||
|
||||
### 性能优化
|
||||
|
||||
#### 使用事件捕获模式提高响应速度
|
||||
- **改进点**:
|
||||
- 使用 `addEventListener('keydown', handler, { capture: true })` 代替默认的冒泡模式
|
||||
- 在事件处理链的最早阶段捕获按键
|
||||
- 减少了 Obsidian Vim 模式处理与插件处理之间的时间差
|
||||
- **优势**:
|
||||
- ESC 键响应更快,几乎没有延迟
|
||||
- 输入法切换更加流畅自然
|
||||
- 减少了状态不一致的可能性
|
||||
|
||||
#### 优化输入法检测逻辑
|
||||
- **改进点**:
|
||||
- 在 ESC 键处理时,先检测当前输入法再决定是否切换
|
||||
- 避免不必要的 `fcitx-remote` 调用
|
||||
- 减少了 10-20ms 的处理时间
|
||||
- **效果**:
|
||||
- 当前已经是英文输入法时,不会重复切换
|
||||
- 降低了系统资源占用
|
||||
|
||||
### 代码清理
|
||||
|
||||
#### 移除冗余代码
|
||||
- **删除内容**:
|
||||
- 移除了 `testVimModeSimulation()` 测试函数(约20行)
|
||||
- 移除了 `testCurrentVimMode()` 测试函数(约15行)
|
||||
- 移除了测试命令的注册代码
|
||||
- 删除了全局键盘监听的遗留代码
|
||||
- **影响**:
|
||||
- 减少了约 50 行未使用的代码
|
||||
- 降低了插件体积约 2KB
|
||||
- 提高了代码可维护性
|
||||
|
||||
#### 简化日志输出
|
||||
- **改进前**:每个事件都有详细的调试日志,包括:
|
||||
```
|
||||
🔍 Current IM: xxx
|
||||
📖 Entering insert mode...
|
||||
🎯 Vim mode: xxx
|
||||
💾 Saved IM status: xxx
|
||||
🔑 Detected ESC key press
|
||||
🔑 Insert key pressed: i
|
||||
```
|
||||
- **改进后**:只保留关键的状态转换日志:
|
||||
```
|
||||
🚀 Loading plugin...
|
||||
🔤 ESC → English (saved Chinese)
|
||||
🈳 → Chinese
|
||||
❌ Error: xxx
|
||||
```
|
||||
- **优势**:
|
||||
- 减少了 70% 的控制台输出
|
||||
- 日志更加清晰,易于查看关键信息
|
||||
- 不影响问题排查(错误日志仍然详细)
|
||||
|
||||
#### 代码结构优化
|
||||
- **改进内容**:
|
||||
- 简化了 `onunload()` 方法,移除冗余的 try-catch
|
||||
- 统一了错误处理格式
|
||||
- 改进了代码注释的清晰度
|
||||
- 优化了函数命名的一致性
|
||||
- **效果**:
|
||||
- 代码更易读易懂
|
||||
- 降低了未来维护成本
|
||||
|
||||
### 技术改进
|
||||
|
||||
#### 多重检测机制
|
||||
插件现在使用三重检测机制确保可靠性:
|
||||
|
||||
1. **键盘事件监听(主要)**
|
||||
- 使用 `capture` 模式监听 ESC 和 Insert 按键
|
||||
- 在事件处理链的最早阶段捕获
|
||||
- 优先级最高,响应最快
|
||||
|
||||
2. **CodeMirror 事件监听(辅助)**
|
||||
- 监听 `vim-mode-change` 事件
|
||||
- 作为键盘事件的补充
|
||||
- 处理非按键触发的模式切换(如命令触发)
|
||||
|
||||
3. **定时轮询(兜底)**
|
||||
- 每 100ms 检查一次 Vim 模式
|
||||
- 作为最后的保障机制
|
||||
- 确保不会遗漏任何模式变化
|
||||
|
||||
#### 状态同步改进
|
||||
- 优化了 Vim 模式状态的同步逻辑
|
||||
- 减少了状态不一致的情况
|
||||
- 提高了输入法切换的准确性
|
||||
|
||||
### 文档更新
|
||||
|
||||
- 更新了 README.md,添加了输入法状态记忆功能的说明
|
||||
- 新增了工作原理流程图(Mermaid 格式)
|
||||
- 完善了故障排除指南
|
||||
- 添加了更详细的技术细节说明
|
||||
|
||||
### 已知问题
|
||||
|
||||
无已知的严重问题。如果遇到问题,请查看 [故障排除](./README.md#故障排除) 或提交 Issue。
|
||||
|
||||
### 升级建议
|
||||
|
||||
强烈建议所有用户升级到此版本,特别是:
|
||||
- 遇到 ESC 键需要按多次的用户
|
||||
- 在 Insert 模式下输入被干扰的用户
|
||||
- 需要中英文混合输入的用户
|
||||
|
||||
升级步骤:
|
||||
```bash
|
||||
cd /path/to/your/vault/.obsidian/plugins/vim-im-switch/
|
||||
git pull origin main
|
||||
npm install
|
||||
npm run build
|
||||
# 重启 Obsidian
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## [1.0.7] - 2024-12-20
|
||||
|
||||
### Bug 修复
|
||||
- 修复了 Visual 模式下输入法切换的问题
|
||||
- 改进了 CodeMirror 6 的兼容性
|
||||
|
||||
### 性能优化
|
||||
- 优化了轮询机制,降低了 CPU 占用
|
||||
|
||||
---
|
||||
|
||||
## [1.0.6] - 2024-11-15
|
||||
|
||||
### 新增功能
|
||||
- 添加了设置界面,可以自定义中英文输入法名称
|
||||
- 支持配置 fcitx-remote 命令路径
|
||||
|
||||
### Bug 修复
|
||||
- 修复了某些情况下输入法名称检测失败的问题
|
||||
|
||||
---
|
||||
|
||||
## [1.0.5] - 2024-10-10
|
||||
|
||||
### Bug 修复
|
||||
- 修复了 Windows 系统下的兼容性问题
|
||||
- 改进了错误处理逻辑
|
||||
|
||||
---
|
||||
|
||||
## [1.0.4] - 2024-09-05
|
||||
|
||||
### 新增功能
|
||||
- 添加了对 Linux 系统的支持
|
||||
- 改进了日志输出格式
|
||||
|
||||
---
|
||||
|
||||
## [1.0.3] - 2024-08-01
|
||||
|
||||
### Bug 修复
|
||||
- 修复了初始化时的异步问题
|
||||
- 改进了命令执行的错误处理
|
||||
|
||||
---
|
||||
|
||||
## [1.0.2] - 2024-07-15
|
||||
|
||||
### 性能优化
|
||||
- 优化了输入法切换的响应时间
|
||||
- 减少了不必要的命令调用
|
||||
|
||||
---
|
||||
|
||||
## [1.0.1] - 2024-06-20
|
||||
|
||||
### Bug 修复
|
||||
- 修复了插件加载失败的问题
|
||||
- 改进了兼容性
|
||||
|
||||
---
|
||||
|
||||
## [1.0.0] - 2024-06-01
|
||||
|
||||
### 首次发布
|
||||
- 基本的 Vim 模式输入法自动切换功能
|
||||
- 支持 macOS 系统
|
||||
- 支持 Normal/Insert 模式切换
|
||||
|
||||
---
|
||||
|
||||
## 图例说明
|
||||
|
||||
- **新增功能** - Added:新功能
|
||||
- **Bug 修复** - Fixed:问题修复
|
||||
- **性能优化** - Performance:性能改进
|
||||
- **代码清理** - Cleanup:代码整理
|
||||
- **技术改进** - Technical:技术升级
|
||||
- **文档更新** - Documentation:文档完善
|
||||
- **已知问题** - Known Issues:已知问题
|
||||
- **升级建议** - Upgrade:升级指南
|
||||
- **重要里程碑** - Milestone:重要版本
|
||||
Reference in New Issue
Block a user