Skip to main content
  1. Posts/

Vim 实现的输入法体验

··195 words·1 min·
Table of Contents

文接 上回,Vim 虽然贵为编辑器之神,有一个没有解决好的问题就是输入中文,以及中英文的切换问题。最近也尝试了一些试图利用 Vim 提供的功能,在 Vim 中实现输入法的插件。本文做一总结点评。

VimIM
#

VimIM 是一个比较早尝试在 Vim 中实现输入法的插件,可惜在 2012 年就停止更新了。2012 年正是 Vim 的灰暗时期,当时连 job api 都没有出来,Vim 中调用函数只能是 blocking 方式的。

使用方式,首先下载 VimIM,可以用插件管理器或者手动下载。

Plug 'vim-scripts/VimIM'

但是这个仓库只包含代码,不包含数据,从 这里 可以下载到字典数据,把 vimim.cjk.txtvimim.gbk.bsddbvimim.txt 放到 VimIM 插件的 plugin 目录下。在我的系统上,VimIM 安装目录在 ~/.local/share/nvim/plugged/VimIM/plugin

wget -P  ~/.local/share/nvim/plugged/VimIM/plugin https://raw.fastgit.org/vimim/vimim/master/plugin/vimim.cjk.txt
wget -P  ~/.local/share/nvim/plugged/VimIM/plugin https://raw.fastgit.org/vimim/vimim/master/plugin/vimim.gbk.bsddb
wget -P  ~/.local/share/nvim/plugged/VimIM/plugin https://raw.fastgit.org/vimim/vimim/master/plugin/vimim.txt

下面是最小的可运行配置:

set runtimepath+=/home/haojiedong/.local/share/nvim/plugged/VimIM
" 关闭云输入
let g:Vimim_cloud=-1

打开 Vim,进入 insert 模式,使用 Ctrl + Shift + / 开启中文输入(这个是一个开关,再按一次关闭中文输入),输入英文字符,会出现弹出菜单,按数字可以选择汉字。

体验:输入速度很快,并且匹配很准,没有延迟的感觉。

=- 可以往后、往前翻页,Tab 可以在给出的候选项之间切换,按空格可以让选中的词语上屏,按 Enter 输入英文字符。

在 Vim 7.4 中测试可以运行,使用 Neovim 无法工作,不清楚具体是哪里有问题,这个插件好久没更新了,可能是不兼容了。

参考
#

ZFVimIM
#

ZFVimIM 是一个比较新的用 Vim 实现的输入法。

使用如下的配置:

call plug#begin(expand('~/.local/share/nvim/plugged'))
  Plug 'ZSaberLv0/ZFVimIM'
  Plug 'ZSaberLv0/ZFVimJob'
call plug#end()

" 使用本地 db 的配置
function! s:zfvimim_init() abort
  let db = ZFVimIM_dbInit({'name' : 'jd_db'})
  call ZFVimIM_cloudRegister({
              \   'mode' : 'local',
              \   'dbId' : db['dbId'],
              \   'repoPath' : expand('~/scratch_dir/'),
              \   'dbFile' : 'pinyin.txt',
              \   'dbCountFile' : 'pinyin_count.txt',
              \ })
endfunction

augroup zfvim_conf
  autocmd!
  autocmd VimEnter * call s:zfvimim_init()
augroup END

接下来需要下载字典,也就是作者说的 db,从 这里 下载拼音文件 pinyin.txt 和 count 文件 pinyin_count.txt,放到一个测试的目录,上面的配置中,repoPath 对应的就是这个文件存放的目录。

然后使用上述配置打开 Neovim,在插入模式下,使用 ;; 打开中文输入模式,开始输入即可。由于 pinyin.txt 只包含单个字拼音的数据,所以一点也不智能,输入拼音词组,需要自己一个个去选择数字来组词,所以速度比较慢。可以使用这个插件提供的 IMAdd 命令添加个人词组。例如, :IMAdd 云淡风轻 yundanfengqing

加载一个更大的词库,能够缓解输入时需要自己组词的尴尬,可以使用 这里 提供的 pinyin_huge.txt 和 pinyin_huge_count.txt 测试。

这个插件还支持云输入模式,需要添加下面的插件和配置:

" 插件地址:https://github.com/ZSaberLv0/ZFVimIM_openapi
Plug 'ZSaberLv0/ZFVimIM_openapi'

let g:ZFVimIM_openapi_enable=1

体验:有一些延迟卡顿,但是在 Neovim 下是可以正常使用的,云输入法挺好用的,比较准确(前提是可以正常使用 wget 进行请求)。

Related

Vim 和 Neovim 的前世今生
··588 words·3 mins
Sort lines based on a column in Vim/Nvim
··231 words·2 mins
如何让 Neovim 中文输入时自动切换输入法
··287 words·2 mins