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

2.9 KiB
Raw Blame History

项目实现对比

本项目当前包含两套相关但独立的输入法切换实现:

实现 文件 当前角色 主要切换方式
原生 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.vimHammerspoon 优先,im-select fallback。
  • Obsidian继续使用现有 main.ts 插件逻辑,保持 fcitx-remote 路径。

两者目标相同,但实现路径不同;不要把原生 Vim 的 Hammerspoon 调整误认为 Obsidian 插件也已改造。