Vim 使用笔记:自动关闭输入法,最大化窗口

进入普通模式后关闭输入法(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