5.8 KiB
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> |
im-select <IM> |
| 全局变量前缀 | g:fcitx_* |
g:imselect_* |
| 函数前缀 | Fcitx* |
IMSelect* |
功能特性
✅ 自动切换输入法:在 Normal 模式和 Insert 模式之间切换时自动切换输入法
✅ 智能状态记忆:记住上次 Insert 模式的输入法状态,下次自动恢复
✅ 异步处理:使用 job_start() 异步执行,避免 UI 阻塞
✅ 中英混合友好:完美支持中英文混合输入场景
安装要求
1. 安装 im-select
本项目已经包含了 im-select 可执行文件(适用于 macOS ARM64)。
如果你需要其他版本,可以从这里获取:
或者使用项目中的 im-select 文件:
# 确保 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 安装
# 如果在项目目录中
./im-select
# 如果在 PATH 中
im-select
应该输出当前的输入法名称,例如:
com.apple.keylayout.ABC
安装插件
方法 1:复制到 Vim 插件目录
mkdir -p ~/.vim/plugin
cp vim-im-switch-select.vim ~/.vim/plugin/
方法 2:在 .vimrc 中 source
" 在 .vimrc 中添加
source /Users/gavin/vim-im-switch/vim-im-switch-select.vim
方法 3:使用插件管理器
vim-plug:
Plug 'yourusername/vim-im-switch', { 'rtp': 'vim-im-switch-select.vim' }
配置
在 .vimrc 中添加配置(可选):
" 英文输入法 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
# 切换到你想要的输入法,然后运行:
./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
使用方法
插件安装后会自动工作,无需手动操作:
-
进入 Insert 模式 (
i,a,o等)- 自动恢复上次保存的输入法状态
-
退出 Insert 模式 (
ESC)- 保存当前输入法状态
- 自动切换到英文输入法
-
中英文混合输入
- 插件会记住你每次退出 Insert 模式时的输入法
- 下次进入时自动恢复
测试
运行自动化测试
# 测试 im-select 功能
./test-im-select.sh
# 在 Vim 中测试插件
./run-vim-test.sh
手动测试步骤
-
启动 Vim 并打开测试文件:
vim test-im-switch.txt -
按
i进入 Insert 模式 -
切换到中文输入法,输入一些中文
-
按
ESC退出到 Normal 模式- 观察输入法是否切换到英文
-
再次按
i进入 Insert 模式- 观察输入法是否自动恢复到中文
-
在 Insert 模式下,手动切换到英文输入法,输入一些英文
-
按
ESC退出到 Normal 模式 -
再次按
i进入 Insert 模式- 观察输入法是否保持英文
调试
查看插件是否加载
:echo exists('g:imselect_loaded')
" 应该输出 1
查看保存的输入法状态
:echo g:imselect_last_insert_im_name
" 输出上次 Insert 模式的输入法名称
手动测试函数
" 切换到英文
:call IMSelect2en()
" 恢复输入法
:call IMSelect2zh()
查看 Vim 消息
:messages
故障排除
插件没有效果
-
检查 im-select 是否可执行:
which im-select # 或 ls -l ./im-select -
检查 Vim 版本是否支持 job_start():
:echo has('job') " 应该输出 1 -
检查是否有错误消息:
:messages
输入法切换延迟
- 这是正常的,因为使用了异步处理
- 通常延迟小于 100ms,不影响使用
输入法 ID 不正确
# 切换到你的中文输入法,然后运行:
./im-select
# 将输出的 ID 配置到 .vimrc:
let g:imselect_chinese_im = '你的输入法ID'
与原版的兼容性
vim-im-switch-select.vim 和 vim-im-switch.vim 可以共存,但不建议同时使用。它们使用不同的:
- 全局变量名(
g:imselect_*vsg:fcitx_*) - 函数名(
IMSelect*vsFcitx*) - 自动命令组名(
IMSelectvsFcitx)
文件清单
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- 本说明文件
参考链接
许可证
MIT License
如有问题或建议,欢迎提交 Issue!