Files
vim-im-switch/README-im-select.md
2025-12-05 13:34:29 +08:00

5.8 KiB
Raw Permalink Blame History

vim-im-switch-select.vim

使用 im-select 而不是 fcitx-remote 的 Vim 输入法自动切换插件

概述

vim-im-switch-select.vimvim-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

使用方法

插件安装后会自动工作,无需手动操作:

  1. 进入 Insert 模式 (i, a, o 等)

    • 自动恢复上次保存的输入法状态
  2. 退出 Insert 模式 (ESC)

    • 保存当前输入法状态
    • 自动切换到英文输入法
  3. 中英文混合输入

    • 插件会记住你每次退出 Insert 模式时的输入法
    • 下次进入时自动恢复

测试

运行自动化测试

# 测试 im-select 功能
./test-im-select.sh

# 在 Vim 中测试插件
./run-vim-test.sh

手动测试步骤

  1. 启动 Vim 并打开测试文件:

    vim test-im-switch.txt
    
  2. i 进入 Insert 模式

  3. 切换到中文输入法,输入一些中文

  4. ESC 退出到 Normal 模式

    • 观察输入法是否切换到英文
  5. 再次按 i 进入 Insert 模式

    • 观察输入法是否自动恢复到中文
  6. 在 Insert 模式下,手动切换到英文输入法,输入一些英文

  7. ESC 退出到 Normal 模式

  8. 再次按 i 进入 Insert 模式

    • 观察输入法是否保持英文

调试

查看插件是否加载

:echo exists('g:imselect_loaded')
" 应该输出 1

查看保存的输入法状态

:echo g:imselect_last_insert_im_name
" 输出上次 Insert 模式的输入法名称

手动测试函数

" 切换到英文
:call IMSelect2en()

" 恢复输入法
:call IMSelect2zh()

查看 Vim 消息

:messages

故障排除

插件没有效果

  1. 检查 im-select 是否可执行

    which im-select
    # 或
    ls -l ./im-select
    
  2. 检查 Vim 版本是否支持 job_start()

    :echo has('job')
    " 应该输出 1
    
  3. 检查是否有错误消息

    :messages
    

输入法切换延迟

  • 这是正常的,因为使用了异步处理
  • 通常延迟小于 100ms不影响使用

输入法 ID 不正确

# 切换到你的中文输入法,然后运行:
./im-select

# 将输出的 ID 配置到 .vimrc
let g:imselect_chinese_im = '你的输入法ID'

与原版的兼容性

vim-im-switch-select.vimvim-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 - 本说明文件

参考链接

许可证

MIT License


如有问题或建议,欢迎提交 Issue