Ⅰ. 插件描述
极好用的词典自动补全插件 vim-easycompleteⅡ. 基本信息
|
Ⅲ. 安装方法
使用Vundle管理器安装
在你的.vimrc下添加:Plugin 'jayli/vim-easycomplete'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall
对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。
使用NeoBundle管理器安装
在你的.vimrc下添加:NeoBundle 'jayli/vim-easycomplete'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall
使用VimPlug管理器安装
在你的.vimrc下添加:Plug 'jayli/vim-easycomplete'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall
使用Pathogen管理器安装
在终端中运行以下命令:cd ~/.vim/bundle
git clone https://github.com/jayli/vim-easycomplete
Ⅳ. 文档说明
# Vim-EasyComplete
字典 VIM 自动补全 && SnipMate。注意不要和 SuperTab 共用。

VIM 自动补全插件走查:
- YouCompleteMe:最权威的补全插件。不支持 Ultisnips 不支持,启动速度太慢,在 MacBookPro 上打开 VIM 要卡上 600 毫秒至少。
- SnipMate:仅做代码展开,完全基于 VimL 实现,便携性很好,不带补全提示。
- Deoplete:该插件只能运行在 VIM8 和 Neovim 上,必须依赖 Python3,配置太麻烦了,不兼容vim7。
- Completor:一个全新的自动补全插件,作者是中国人 Wei Zhang,同时支持了关键词匹配和代码片段缩写匹配,不兼容vim7。
- Zencoding:一个古董。
我的需求,第一,浮窗提示,第二,支持代码片段提示+展开,第三,优先选择关键词和词表匹配,第四,因为经常登录服务器,除了要支持 VIM7 以外,还要便于携带和安装,要纯 VimL 实现。最后,我不需要输入跟随提示(太干扰),我更习惯 Tab 提示。
Vim-EasyComplete + Vim-Dictionary 满足这些需求。
- Vim-EasyComplete 只对 SnipMate 有依赖
- 兼容 Linux 和 MacOS,暂不支持 CygWin
安装
可选 Pathogen、Vundle 等很棒的插件管理器:
- 基于 Pathogen.vim 安装(VIM7 & 8)
同时安装 EasyComplete、vim-dictionary、snipmate 和 jedi-vim(可选)
cd ~/.vim/bundle/
git clone https://github.com/tomtom/tlib_vim.git
git clone https://github.com/MarcWeber/vim-addon-mw-utils.git
git clone https://github.com/garbas/vim-snipmate.git
git clone https://github.com/honza/vim-snippets.git
git clone https://github.com/jayli/vim-easycomplete.git
git clone https://github.com/jayli/vim-dictionary.git
git clone https://github.com/davidhalter/jedi-vim.git
Python 语言的联想需要安装 Jedi
pip3 install jedi
- 基于 Vundle.vim 安装(VIM7 & 8)
在.vimrc中添加下面代码,进入vim后执行:PluginInstall
" SnipMate 携带的四个插件
Plugin 'MarcWeber/vim-addon-mw-utils'
Plugin 'tomtom/tlib_vim'
Plugin 'garbas/vim-snipmate'
Plugin 'honza/vim-snippets'
" Jedi
Plugin 'davidhalter/jedi-vim'
" EasyComplete 插件和 Dictionary 词表
Plugin 'jayli/vim-easycomplete'
Plugin 'jayli/vim-dictionary'
安装jedi:pip3 install jedi
- 也可以直接基于 VIM8 安装
执行如下脚本:
git clone https://github.com/jayli/vim-easycomplete.git \
~/.vim/pack/dist/start/vim-easycomplete
git clone https://github.com/jayli/vim-dictionary.git \
~/.vim/pack/dist/start/vim-dictionary
git clone https://github.com/MarcWeber/vim-addon-mw-utils.git \
~/.vim/pack/dist/start/vim-addon-mw-utils
git clone https://github.com/tomtom/tlib_vim.git \
~/.vim/pack/dist/start/tlib_vim
git clone https://github.com/garbas/vim-snipmate.git \
~/.vim/pack/dist/start/vim-snipmate
git clone https://github.com/honza/vim-snippets.git \
~/.vim/pack/dist/start/vim-snippets
最后安装jedi:pip3 install jedi
配置
使用 Tab 键呼出补全菜单,如果遇到 Tab 键在插入模式下不能输出原始 Tab,我个人习惯敲入 Shift-Tab 。这里以配置 Tab 键唤醒补全菜单为例:在.vimrc中加入:
imap <Tab> <Plug>EasyCompTabTrigger
imap <S-Tab> <Plug>EasyCompShiftTabTrigger
这里起主要作用的是第一行,第二行 Shift-Tab 为可选,我这里将 Shift-Tab 也定义为了插入模式下前进一个 Tab。
弹窗样式配置,这里提供了两个默认样式配置,暗:dark,亮:light,通用:rider,在.vimrc里增加下面这行
let g:pmenu_scheme = 'dark'
不用针对 SnipMate 做额外配置,安装好就可以用了
帮助 Tags 生成(可选):安装完成后进入 VIM 执行:helptags ~/.vim/bundle/vim-easycomplete/doc,便可:help easycomplete来阅读文档
使用
EasyComplete 目前有四种常见用法:关键词补全、字典补全、文件路径补全和代码片段补全,除了代码片段补全之外,其他三种补全逻辑参照了 YCM 的实现,比如文件路径补全和关键词补全是解耦开的。
- 关键字补全和字典补全
和 VIM 自带的智能补全 C-X C-N 能力一致,从当前缓冲区和字典中解析出关键词匹配出来,速度也是最快的。单词输入时按 Tab 呼出补全菜单,字典配置方法set dictionary={你的字典文件},样例如下,用 Tab 和 Shift-Tab 键来切换下一个和上一个匹配词。
- 文件路径补全
VIM 自带 C-X C-F 来呼出文件路径匹配窗,也很好用,但补全窗口的起点是整个路径匹配的起点,占太多屏幕面积,这里参照 YCM 重写了路径匹配的逻辑。插件会判断你是否正在输入一个路径,尤其是当你输入./或者/,也可紧跟要匹配的文件名或者目录名片段,点击 Tab 呼出匹配项。

- 代码片段补全(基于 SnipMate)
支持的代码段来自于vim-snippets,可以在这里查看有哪些可用的代码片段。

代码片段内的占位符填充的动作和 SnipMate 保持一样,用 Tab 键切换下一个占位符。比如这个例子展示了代码补全的情形。