Files
vim-im-switch/COMPARISON.md
2026-07-15 11:10:25 +08:00

88 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目实现对比
本项目当前包含两套相关但独立的输入法切换实现:
| 实现 | 文件 | 当前角色 | 主要切换方式 |
|---|---|---|---|
| 原生 Vim 插件 | `vim-im-switch-select.vim` | 当前 macOS 原生 Vim 稳定方案 | Hammerspoon 优先,`im-select` fallback |
| Obsidian 插件 | `main.ts` | Obsidian Vim keymap 输入法切换 | `fcitx-remote` |
## 原生 Vim 插件
`vim-im-switch-select.vim` 面向 macOS 原生 Vim。
当前稳定策略:
- Normal / Esc切到英文 `ABC`
- Insert恢复同一 Vim 进程内上次 Insert 使用的中/英状态。
- 首次进入 Insert 默认中文。
- 优先使用 Hammerspoon
```lua
hs.keycodes.setLayout("ABC")
hs.keycodes.setMethod("Pinyin Simplified")
```
- 当 `hs` 不可用时fallback 到 `im-select`
```bash
im-select com.apple.keylayout.ABC
im-select com.apple.inputmethod.SCIM.ITABC
```
### 为什么不再只依赖 im-select
`im-select` 只能切换 macOS input source ID。Apple 拼音可能出现以下不一致状态:
```text
sourceID = com.apple.inputmethod.SCIM.ITABC
layout = ABC
method = Pinyin Simplified
```
表现为菜单栏显示中文输入法,但实际仍输入英文。
Hammerspoon 的 `setLayout()` / `setMethod()` 能直接设置 layout / method因此是当前主路径。
## Obsidian 插件
`main.ts` 是 Obsidian 插件入口。本次 Hammerspoon 方案没有改造 Obsidian 插件。
当前 Obsidian 插件仍然:
- 使用 `fcitx-remote` 查询和切换输入法。
- 监听 Obsidian / CodeMirror Vim 模式变化。
- Normal / Visual 模式切英文。
- Insert / Replace 模式恢复上次 Insert 状态。
- 通过插件设置页配置不同平台的 `fcitx-remote` 路径。
## 行为对比
| 场景 | 原生 Vim 插件 | Obsidian 插件 |
|---|---|---|
| Normal / Esc | Hammerspoon `setLayout("ABC")`fallback `im-select` | `fcitx-remote -s <English IM>` |
| Insert 中文恢复 | Hammerspoon `setMethod("Pinyin Simplified")`fallback `im-select` | `fcitx-remote -s <Chinese IM>` |
| Insert 状态记忆 | 同一 Vim 进程内有效 | Obsidian 插件运行期间有效 |
| 跨进程/重启持久化 | 不持久化 | 由 Obsidian 插件运行状态决定 |
| 最近 Hammerspoon 调整影响 | 是 | 否 |
## 主要文件
| 文件 | 说明 |
|---|---|
| `vim-im-switch-select.vim` | 当前原生 Vim 稳定插件 |
| `main.ts` | Obsidian 插件入口 |
| `README.md` | 中文说明文档 |
| `README_en.md` | English documentation |
| `CHANGELOG.md` / `CHANGELOG_en.md` | 更新日志 |
| `RELEASE.md` | 发布说明 |
## 总结
当前推荐:
- 原生 Vim使用 `vim-im-switch-select.vim`Hammerspoon 优先,`im-select` fallback。
- Obsidian继续使用现有 `main.ts` 插件逻辑,保持 `fcitx-remote` 路径。
两者目标相同,但实现路径不同;不要把原生 Vim 的 Hammerspoon 调整误认为 Obsidian 插件也已改造。