88 lines
2.9 KiB
Markdown
88 lines
2.9 KiB
Markdown
# 项目实现对比
|
||
|
||
本项目当前包含两套相关但独立的输入法切换实现:
|
||
|
||
| 实现 | 文件 | 当前角色 | 主要切换方式 |
|
||
|---|---|---|---|
|
||
| 原生 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 插件也已改造。
|