# vim-im-switch-select.vim > 使用 `im-select` 而不是 `fcitx-remote` 的 Vim 输入法自动切换插件 ## 概述 `vim-im-switch-select.vim` 是 `vim-im-switch.vim` 的变体版本,使用 `im-select` 工具而不是 `fcitx-remote` 来控制输入法切换。 ## 主要区别 | 特性 | vim-im-switch.vim | vim-im-switch-select.vim | |------|------------------|-------------------------| | 输入法工具 | fcitx-remote | im-select | | 适用平台 | macOS, Linux | 主要是 macOS | | 获取当前输入法 | `fcitx-remote -n` | `im-select` | | 切换输入法 | `fcitx-remote -s ` | `im-select ` | | 全局变量前缀 | `g:fcitx_*` | `g:imselect_*` | | 函数前缀 | `Fcitx*` | `IMSelect*` | ## 功能特性 ✅ **自动切换输入法**:在 Normal 模式和 Insert 模式之间切换时自动切换输入法 ✅ **智能状态记忆**:记住上次 Insert 模式的输入法状态,下次自动恢复 ✅ **异步处理**:使用 `job_start()` 异步执行,避免 UI 阻塞 ✅ **中英混合友好**:完美支持中英文混合输入场景 ## 安装要求 ### 1. 安装 im-select 本项目已经包含了 `im-select` 可执行文件(适用于 macOS ARM64)。 如果你需要其他版本,可以从这里获取: - [im-select GitHub](https://github.com/daipeihust/im-select) 或者使用项目中的 `im-select` 文件: ```bash # 确保 im-select 有执行权限 chmod +x /path/to/vim-im-switch/im-select # 将 im-select 添加到 PATH(可选) sudo cp /path/to/vim-im-switch/im-select /usr/local/bin/ ``` ### 2. 验证 im-select 安装 ```bash # 如果在项目目录中 ./im-select # 如果在 PATH 中 im-select ``` 应该输出当前的输入法名称,例如: ``` com.apple.keylayout.ABC ``` ## 安装插件 ### 方法 1:复制到 Vim 插件目录 ```bash mkdir -p ~/.vim/plugin cp vim-im-switch-select.vim ~/.vim/plugin/ ``` ### 方法 2:在 .vimrc 中 source ```vim " 在 .vimrc 中添加 source /Users/gavin/vim-im-switch/vim-im-switch-select.vim ``` ### 方法 3:使用插件管理器 **vim-plug**: ```vim Plug 'yourusername/vim-im-switch', { 'rtp': 'vim-im-switch-select.vim' } ``` ## 配置 在 `.vimrc` 中添加配置(可选): ```vim " 英文输入法 ID(默认值) let g:imselect_english_im = 'com.apple.keylayout.ABC' " 中文输入法 ID(可选,插件会自动检测) " 例如:搜狗输入法 " let g:imselect_chinese_im = 'com.sogou.inputmethod.sogou' " 例如:系统自带简体拼音 " let g:imselect_chinese_im = 'com.apple.inputmethod.SCIM.ITABC' ``` ### 如何获取输入法 ID ```bash # 切换到你想要的输入法,然后运行: ./im-select # 或 im-select ``` 常见的输入法 ID: - 美国英文:`com.apple.keylayout.ABC` - 简体拼音:`com.apple.inputmethod.SCIM.ITABC` - 搜狗输入法:`com.sogou.inputmethod.sogou` - 百度输入法:`com.baidu.inputmethod.BaiduIM.pinyin` - 微信输入法:`com.tencent.inputmethod.wetype.pinyin` ## 使用方法 插件安装后会自动工作,无需手动操作: 1. **进入 Insert 模式** (`i`, `a`, `o` 等) - 自动恢复上次保存的输入法状态 2. **退出 Insert 模式** (`ESC`) - 保存当前输入法状态 - 自动切换到英文输入法 3. **中英文混合输入** - 插件会记住你每次退出 Insert 模式时的输入法 - 下次进入时自动恢复 ## 测试 ### 运行自动化测试 ```bash # 测试 im-select 功能 ./test-im-select.sh # 在 Vim 中测试插件 ./run-vim-test.sh ``` ### 手动测试步骤 1. 启动 Vim 并打开测试文件: ```bash vim test-im-switch.txt ``` 2. 按 `i` 进入 Insert 模式 3. 切换到中文输入法,输入一些中文 4. 按 `ESC` 退出到 Normal 模式 - 观察输入法是否切换到英文 5. 再次按 `i` 进入 Insert 模式 - 观察输入法是否自动恢复到中文 6. 在 Insert 模式下,手动切换到英文输入法,输入一些英文 7. 按 `ESC` 退出到 Normal 模式 8. 再次按 `i` 进入 Insert 模式 - 观察输入法是否保持英文 ## 调试 ### 查看插件是否加载 ```vim :echo exists('g:imselect_loaded') " 应该输出 1 ``` ### 查看保存的输入法状态 ```vim :echo g:imselect_last_insert_im_name " 输出上次 Insert 模式的输入法名称 ``` ### 手动测试函数 ```vim " 切换到英文 :call IMSelect2en() " 恢复输入法 :call IMSelect2zh() ``` ### 查看 Vim 消息 ```vim :messages ``` ## 故障排除 ### 插件没有效果 1. **检查 im-select 是否可执行**: ```bash which im-select # 或 ls -l ./im-select ``` 2. **检查 Vim 版本是否支持 job_start()**: ```vim :echo has('job') " 应该输出 1 ``` 3. **检查是否有错误消息**: ```vim :messages ``` ### 输入法切换延迟 - 这是正常的,因为使用了异步处理 - 通常延迟小于 100ms,不影响使用 ### 输入法 ID 不正确 ```bash # 切换到你的中文输入法,然后运行: ./im-select # 将输出的 ID 配置到 .vimrc: let g:imselect_chinese_im = '你的输入法ID' ``` ## 与原版的兼容性 `vim-im-switch-select.vim` 和 `vim-im-switch.vim` 可以共存,但不建议同时使用。它们使用不同的: - 全局变量名(`g:imselect_*` vs `g:fcitx_*`) - 函数名(`IMSelect*` vs `Fcitx*`) - 自动命令组名(`IMSelect` vs `Fcitx`) ## 文件清单 - `vim-im-switch-select.vim` - 插件主文件 - `im-select` - im-select 可执行文件(macOS ARM64) - `test-im-select.sh` - 自动化测试脚本 - `run-vim-test.sh` - Vim 交互测试脚本 - `test-im-switch.txt` - 测试文件 - `README-im-select.md` - 本说明文件 ## 参考链接 - [im-select GitHub](https://github.com/daipeihust/im-select) - [原版 vim-im-switch 项目](https://github.com/yourusername/vim-im-switch) ## 许可证 MIT License --- **如有问题或建议,欢迎提交 Issue!**