2.9 KiB
2.9 KiB
项目实现对比
本项目当前包含两套相关但独立的输入法切换实现:
| 实现 | 文件 | 当前角色 | 主要切换方式 |
|---|---|---|---|
| 原生 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:
hs.keycodes.setLayout("ABC") hs.keycodes.setMethod("Pinyin – Simplified") -
当
hs不可用时,fallback 到im-select:im-select com.apple.keylayout.ABC im-select com.apple.inputmethod.SCIM.ITABC
为什么不再只依赖 im-select
im-select 只能切换 macOS input source ID。Apple 拼音可能出现以下不一致状态:
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-selectfallback。 - Obsidian:继续使用现有
main.ts插件逻辑,保持fcitx-remote路径。
两者目标相同,但实现路径不同;不要把原生 Vim 的 Hammerspoon 调整误认为 Obsidian 插件也已改造。