其实关键就两步:1 、检查当前输入法是哪个 2 、切换输入法;
检查可以用 defaults read 来判断:
[[ $(defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceID) =~ com.apple.keylayout.ABC ]]
切换我就用 AppleScript 模拟快捷键切换
c.png
然后在 ideavimrc 中添加映射:
" 解决 esc 后光标左移的问题,自动切换输入法; 这是 ideavim 的写法,因为 ideavim 不支持 autocmd 命令,原生 vim 中可以用 autocmd
inoremap `^:!/Users/logan/.input-source-vim/toggle-normal.sh
nnoremap i :!/Users/logan/.input-source-vim/toggle-insert.shi
nnoremap I :!/Users/logan/.input-source-vim/toggle-insert.shI
nnoremap o :!/Users/logan/.input-source-vim/toggle-insert.sho
nnoremap O :!/Users/logan/.input-source-vim/toggle-insert.shO
nnoremap a :!/Users/logan/.input-source-vim/toggle-insert.sha
nnoremap A :!/Users/logan/.input-source-vim/toggle-insert.shA
默认功能:返回 normal 模式时自动切换输入法为英文
附加功能:当执行了 touch "$HOME/.input-source-vim/data" ,会启动 insert 模式下上一次的输入法的记录
代码主要针对于对 vim 脚本支持不够的 ideavim,原生 vim 中不用映射,直接用 autocmd; 也不用文件来存储上一次插入模式的输入法,可以直接用 vim 脚本的全局变量
仓库 : https://github.com/loganoxo/input-source-vim.git