进入普通模式后关闭输入法(Windows)
怎样让 Vim 在切换模式时自动关闭 / 打开输入法?
Linux 用户可以用 fcitx 输入法,然后安装插件: fcitx.vim 。那么 Windows 用户怎么办?谷歌输入法和微软输入法能在进入普通模式后关闭输入法,进入插入模式后恢复输入法先前的状态,但是搜狗输入法不能自动关闭。
我最近读了一篇文章, 《中文输入法完美配合 MacVim》](http://zh.undozen.com/2013/14) 。文中提到的修改方法同样适用于 Windows 里的 gVim。
我向 .vimrc 添加了以下内容:
if has('win32')
"set noimdisable
autocmd InsertLeave * \ set imdisable|set
iminsert=0
autocmd InsertEnter * \ set
noimdisable|set iminsert=2
endif
说明三点。第一,原文第三行的设置有误,评论里有读者指出来了。第二,我希望这个设置仅在 Windows 里生效,所以加了判断条件。第三,按照这个设置,使用 / 或者 ? 搜索时,无法启用输入法。如果想在搜索时使用输入法,有两个办法。
第一,查阅帮助文档,添加新设置 imsearch:
h ‘iminsert’ h ‘imsearch’
第二,从普通模式出发,先进入命令行模式(Cmdline-mode),再进入插入模式(Insert-mode):
/i
详见帮助文档:
h command-mode
最后提一句。直到写这篇文章时,我才第一次阅读 fcitx.vim 插件。原来作者正是利用 InsertLeave 和 InsertEnter 控制何时开启 / 关闭输入法。我居然一直都不知道,真惭愧。
最大化窗口(openSUSE)
我使用 openSUSE 操作系统搭配 KDE 桌面环境。最大化 gVim 以后,窗口没有边框。我希望 gVim 的窗口占据整个屏幕,同时保留边框。
原先使用这样的设置:
set columns=123
set lines=31
后来查阅了帮助文件,发现这种新写法:
winsize 123 31
因为在终端下无需手动调整 Vim 窗口的尺寸,所以增加限制:
autocmd GUIEnter * winsize 123 31
但是这个设置似乎无法正确调整 GUI 窗口的尺寸,于是继续修改:
function s:Window()
if has('gui')
winsize 123 31
endif
endfunction
autocmd VimEnter * call <sid>Window()
还是有问题。我把命令行高度设置为两行:
set cmdheight=2
按上述设置启动 gVim 以后,命令行的高度只有一行。winsize 的帮助文档里提到另一个设置选项 guiheadroom。我把该选项改成:
set guiheadroom=0
问题就解决了。
我的 .vimrc 内包含以下设置,使得 gVim 在 Windows 和 Linux 里启动后窗口最大化。
function s:CheckOS()
if has('win32')
return 'windows'
else
return 'linux'
endif
endfunction
function s:Window()
if has('gui')
set guiheadroom=0
winsize 123 31
endif
endfunction
if <sid>CheckOS()=='windows'
autocmd GUIEnter * simalt ~x
elseif <sid>CheckOS()=='linux'
autocmd VimEnter * call <sid>Window()
endif