linux vim自动补全插件,Vim-EasyComplete - 一个简单轻便的 VIM 自动补全插件

Vim-EasyComplete ec95b2df75b19c42d7483e3d3a6caff8.png

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6769747465722d6a6f696e253230636861742d79656c6c6f77677265656e2e73766768747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d61634f532d617661696c61626c652d627269676874677265656e2e73766768747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667

代码自动补全插件,把代码片段展开、字典提醒、Tab 唤醒以及语法补全合并在一起。(注意不要和 SuperTab 一起使用)

745d3091285293fd262de4af1798845f.gif

灵感来自这些优秀的插件:

SnipMate:仅做代码展开,完全基于 VimL 实现,不支持语法嗅探。

Deoplete:该插件只能运行在 VIM8 和 Neovim 上,配置麻烦,不兼容vim7。

Completor:一个全新的自动补全插件,作者是中国人 Wei Zhang,同时支持了关键词匹配和代码片段缩写匹配。

Zencoding:一个古董,代码展开。

依赖:补全和字典分别依赖 vim-snipmate 和 vim-dictionary。这里支持了 Go、Python 和 JavaScript 的语法补全。Popup 菜单如下:

b6e3c06816c58a1e9cba0b81a66d7a54.png

安装

可选 Pathogen、Vundle 等很棒的插件管理器,这里以 Pathogen 为例:

同时安装 EasyComplete、vim-dictionary

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

进入 ~/.vim/bundle 安装语言自动匹配插件(根据自己的技术栈选择):

Python git clone https://github.com/davidhalter/jedi-vim.git

Go git clone https://github.com/fatih/vim-go.git

JavaScript & TypeScript git clone https://github.com/jayli/tsuquyomi.git

Python 需要安装 Jedi:pip3 install jedi

JavaScript 需要安装 tsserver,直接执行 npm -g install typescript

Go 需要安装 Gocode:go get -u github.com/nsf/gocode

配置

使用 Tab 键呼出补全菜单,用 Shift-Tab 在插入模式下输入 Tab。在.vimrc中加入:

imap EasyCompTabTrigger

imap EasyCompShiftTabTrigger

弹窗样式配置,这里提供了两个默认样式配置,暗:dark,亮:light,通用:rider,在.vimrc里增加下面这行

let g:pmenu_scheme = 'dark'

SnipMate 可选配置,主要是配置 JavaScript 的类型映射集合:

let g:snipMate = {}

let g:snipMate.scope_aliases = {}

let g:javascript_scope_aliases = 'javascript,javascript-react,javascript-es6-react'

let g:snipMate.scope_aliases['javascript'] = g:javascript_scope_aliases

let g:snipMate.scope_aliases['javascript.jsx'] = g:javascript_scope_aliases

Typescript 和 Javascript 配置:

let g:tsuquyomi_javascript_support = 1

let g:tsuquyomi_completion_detail = 0

let g:tsuquyomi_completion_preview = 0

let g:tsuquyomi_auto_open = 0

Jedi 可选配置:

" Jedi 配置

let g:jedi#auto_initialization = 1

let g:jedi#popup_on_dot = 1

let g:jedi#popup_select_first = 0

let g:jedi#show_call_signatures = "1"

autocmd FileType python setlocal completeopt-=preview

Go 可选配置:

let g:go_disable_autoinstall = 0

let g:go_highlight_functions = 1

let g:go_highlight_methods = 1

let g:go_highlight_structs = 1

let g:go_highlight_operators = 1

let g:go_highlight_build_constraints = 1

let g:go_version_warning = 0

" Go 结构体名字高亮

let g:go_highlight_types = 1

" Go 结构体成员高亮

let g:go_highlight_fields = 1

" Go 函数名高亮

let g:go_highlight_function_calls = 1

使用

EasyComplete 目前有四种常见用法:关键词补全、字典补全、文件路径补全和代码片段补全,除了代码片段补全之外,其他三种补全逻辑参照了 YCM 的实现,比如文件路径补全和关键词补全是解耦开的。

JavaScript 和 TypeScript 的语法补全基于 TSServer,建议配置tsconfig.json

{

"compilerOptions": {

"noImplicitAny": true,

"target": "es5",

"module": "commonjs"

}

}

和 VSCode 的语法嗅探的比较:

fc1d9c30ba5426e1fd4096e6fa97dec5.png

关键字和字典补全和 C-X C-N 一致,字典来源于set dictionary={你的字典文件}配置。

路径补全和 C-X C-F 类似,这里参照 YCM 重写了路径匹配的逻辑。插件会判断你是否正在输入一个路径,尤其是当你输入./或者/,也可紧跟要匹配的文件名或者目录名片段,点击 Tab 呼出匹配项。

a2acb9cb9ca971246efc54fc7362ae89.png

关于代码片段补全,这里支持的代码段来自于 vim-snippets,可以在这里查看有哪些可用的代码片段。代码片段内的占位符填充的动作和 SnipMate 保持一样,用 Tab 键切换下一个占位符。比如这个例子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值