update at 2026-07-15 11:10:25
This commit is contained in:
163
COMPARISON.md
163
COMPARISON.md
@@ -1,118 +1,87 @@
|
||||
# 项目文件对比
|
||||
# 项目实现对比
|
||||
|
||||
## 新增文件(使用 im-select 版本)
|
||||
本项目当前包含两套相关但独立的输入法切换实现:
|
||||
|
||||
| 文件名 | 大小 | 说明 |
|
||||
|--------|------|------|
|
||||
| `vim-im-switch-select.vim` | 4.5KB | 主插件文件(使用 im-select) |
|
||||
| `test-im-select.sh` | 2.2KB | 自动化测试脚本 |
|
||||
| `run-vim-test.sh` | 665B | Vim 交互测试脚本 |
|
||||
| `test-im-switch.txt` | 316B | 测试文件 |
|
||||
| `README-im-select.md` | 5.8KB | 详细说明文档 |
|
||||
| 实现 | 文件 | 当前角色 | 主要切换方式 |
|
||||
|---|---|---|---|
|
||||
| 原生 Vim 插件 | `vim-im-switch-select.vim` | 当前 macOS 原生 Vim 稳定方案 | Hammerspoon 优先,`im-select` fallback |
|
||||
| Obsidian 插件 | `main.ts` | Obsidian Vim keymap 输入法切换 | `fcitx-remote` |
|
||||
|
||||
## 核心差异对比
|
||||
## 原生 Vim 插件
|
||||
|
||||
### vim-im-switch.vim (原版 - fcitx-remote)
|
||||
`vim-im-switch-select.vim` 面向 macOS 原生 Vim。
|
||||
|
||||
```vim
|
||||
" 使用 fcitx-remote
|
||||
executable("fcitx-remote")
|
||||
system("fcitx-remote -n")
|
||||
fcitx-remote -s <IM_ID>
|
||||
当前稳定策略:
|
||||
|
||||
" 变量和函数
|
||||
g:fcitx_*
|
||||
Fcitx*()
|
||||
- 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
|
||||
```
|
||||
|
||||
### vim-im-switch-select.vim (新版 - im-select)
|
||||
表现为菜单栏显示中文输入法,但实际仍输入英文。
|
||||
|
||||
```vim
|
||||
" 使用 im-select
|
||||
executable("im-select")
|
||||
system("im-select")
|
||||
im-select <IM_ID>
|
||||
Hammerspoon 的 `setLayout()` / `setMethod()` 能直接设置 layout / method,因此是当前主路径。
|
||||
|
||||
" 变量和函数
|
||||
g:imselect_*
|
||||
IMSelect*()
|
||||
```
|
||||
## Obsidian 插件
|
||||
|
||||
## 功能完全一致
|
||||
`main.ts` 是 Obsidian 插件入口。本次 Hammerspoon 方案没有改造 Obsidian 插件。
|
||||
|
||||
✅ 自动切换输入法
|
||||
✅ 智能状态记忆
|
||||
✅ 异步处理
|
||||
✅ 中英混合友好
|
||||
✅ 多光标支持
|
||||
✅ 防抖机制
|
||||
当前 Obsidian 插件仍然:
|
||||
|
||||
## 测试验证
|
||||
- 使用 `fcitx-remote` 查询和切换输入法。
|
||||
- 监听 Obsidian / CodeMirror Vim 模式变化。
|
||||
- Normal / Visual 模式切英文。
|
||||
- Insert / Replace 模式恢复上次 Insert 状态。
|
||||
- 通过插件设置页配置不同平台的 `fcitx-remote` 路径。
|
||||
|
||||
### 1. im-select 基础功能测试
|
||||
```bash
|
||||
./test-im-select.sh
|
||||
```
|
||||
结果:✅ 所有测试通过
|
||||
- ✓ im-select 可执行
|
||||
- ✓ 获取当前输入法
|
||||
- ✓ 切换到英文
|
||||
- ✓ 恢复原输入法
|
||||
- ✓ 插件文件完整(9个函数)
|
||||
## 行为对比
|
||||
|
||||
### 2. Vim 插件集成测试
|
||||
```bash
|
||||
./run-vim-test.sh
|
||||
```
|
||||
手动测试步骤:
|
||||
1. 进入 Insert 模式 → 输入法状态保持
|
||||
2. 切换到中文输入 → 输入中文内容
|
||||
3. ESC 退出 → 自动切换到英文
|
||||
4. 再次 i 进入 → 自动恢复中文输入法
|
||||
| 场景 | 原生 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 调整影响 | 是 | 否 |
|
||||
|
||||
## 使用建议
|
||||
## 主要文件
|
||||
|
||||
### 场景 1:macOS 用户,已安装 fcitx-remote-for-osx
|
||||
- 使用 `vim-im-switch.vim`(原版)
|
||||
|
||||
### 场景 2:macOS 用户,使用 im-select
|
||||
- 使用 `vim-im-switch-select.vim`(新版)
|
||||
|
||||
### 场景 3:Linux 用户
|
||||
- 使用 `vim-im-switch.vim`(原版,配合 fcitx)
|
||||
|
||||
### 场景 4:想要更轻量的方案
|
||||
- 使用 `vim-im-switch-select.vim`
|
||||
- 项目已包含 im-select 可执行文件
|
||||
- 无需额外安装 fcitx-remote
|
||||
|
||||
## 安装方法
|
||||
|
||||
```bash
|
||||
# 方法 1:复制到 Vim 插件目录
|
||||
cp vim-im-switch-select.vim ~/.vim/plugin/
|
||||
|
||||
# 方法 2:在 .vimrc 中 source
|
||||
echo "source $(pwd)/vim-im-switch-select.vim" >> ~/.vimrc
|
||||
|
||||
# 方法 3:确保 im-select 在 PATH 中
|
||||
sudo cp im-select /usr/local/bin/
|
||||
chmod +x /usr/local/bin/im-select
|
||||
```
|
||||
|
||||
## 配置示例
|
||||
|
||||
```vim
|
||||
" 在 .vimrc 中添加
|
||||
let g:imselect_english_im = 'com.apple.keylayout.ABC'
|
||||
let g:imselect_chinese_im = 'com.apple.inputmethod.SCIM.ITABC'
|
||||
```
|
||||
| 文件 | 说明 |
|
||||
|---|---|
|
||||
| `vim-im-switch-select.vim` | 当前原生 Vim 稳定插件 |
|
||||
| `main.ts` | Obsidian 插件入口 |
|
||||
| `README.md` | 中文说明文档 |
|
||||
| `README_en.md` | English documentation |
|
||||
| `CHANGELOG.md` / `CHANGELOG_en.md` | 更新日志 |
|
||||
| `RELEASE.md` | 发布说明 |
|
||||
|
||||
## 总结
|
||||
|
||||
✅ **vim-im-switch-select.vim 已创建成功**
|
||||
✅ **逻辑与原版完全相同**
|
||||
✅ **所有测试通过**
|
||||
✅ **文档齐全**
|
||||
当前推荐:
|
||||
|
||||
可以立即投入使用!
|
||||
- 原生 Vim:使用 `vim-im-switch-select.vim`,Hammerspoon 优先,`im-select` fallback。
|
||||
- Obsidian:继续使用现有 `main.ts` 插件逻辑,保持 `fcitx-remote` 路径。
|
||||
|
||||
两者目标相同,但实现路径不同;不要把原生 Vim 的 Hammerspoon 调整误认为 Obsidian 插件也已改造。
|
||||
|
||||
Reference in New Issue
Block a user