在ubuntu下,如何在退出vim编辑模式的时候,设置输入法为英文?

## 一共有两个操作 1. 修改vim的模式 2. 切换`IBus`输入法 ## 似乎有两种可能 1. 直接设置快捷键,启动脚本完成两个操作 2. 利用vim的钩子函数,完成输入法切换 ## 除了以上,还有更好的方案吗?或者上面某种操作压根就不可能完成?
关注者
30
被浏览
1447

6 个回答

假设你说的 编辑模式 就是 Insert 模式吧。不过 钩子函数 是啥就不知道了。我是 Vimmer 但不是程序员,我只认得自动命令(autocmd)。

我用的不是 IBus 而是 fcitx,下面是从我的 .vimrc 里截的:

"=========================================================================
"=======	XXX: 离开 Insert 模式时自动关闭 fcitx 输入法。
"=========================================================================
if has('unix')
	autocmd! InsertLeave *	if system('fcitx-remote') != 0 | call system('fcitx-remote -c') | endif
endif
" 注意: 开启 fcitx 的命令是 'fcitx-remote -o',但是这里不需要

所以就是 Vim 这边的 autocmd 加上输入法那边的 API,两边互相配合。这种方式的关键在于输入法那边要有 API 提供给你。

但是这种方法算是绕过 Vim 另起炉灶,因为 Vim 作为编辑器本身就带有输入法支持特性。看下面这段,也是我的 .vimrc 里截的

" XXX: 下面这两个选项跟 fcitx 不兼容,vim-cn 群里说的,没办法。
"	set imactivatekey=C-space	" 让 vim 知道开启 IM 的按键。XXX: 但是每次进入 Insert 模式会自动打开 IM,而且有时按 <Esc> 会退不出去,只能 kill 掉 IM。SB 选项
"	set imsearch=0		" 查找 ('/') 时禁用 lmap,禁用 IM

很久以前我也遇见你说的这个问题,这一段是我那时候的尝试。我有个习惯,就是觉得有意义的代码即使没用了也不删,只注掉,所以这段一直保存了下来。

看这一段你就知道,imactivatekey 这个选项是用来配置输入法的,另外还有几个跟输入法有关的选项: imcmdline、iminsert、imsearch、imdisable。你想要的功能很可能包含在这些选项里。我当初因为初步尝试失败了,所以后来才改用第一种方法,也就对这些选项没再深究。不过你现在不妨再看看。因为你用的是 IBus 不是 fcitx,另外时间已经过去这么久了,Vim 跟输入法之间的一些兼容性问题可能已经解决了。毕竟能用自带特性的话,还是不要自己造轮子比较好。