Neovim 配置 UltiSnips

更新日期: 2022-02-08 阅读次数: 3719 字数: 560 分类: Vim

安装完成 Neovim 之后,我首先要保证 UltiSnips 插件能够正常使用。 其他插件可以后面慢慢改,但是如果不能使用 snippet 我基本就失去了写代码的能力。

最终效果:

Neovim 配置 UltiSnips

Vim 配置文件迁移到 Neovim

基本原则

If you wish to migrate your existing Vim configuration to NeoVim, simply copy your ~/.vimrc to ~/.config/nvim/init.vim.

UltiSnips 自动提示框不见了

打开 Neovim 之后,发现基础的 UltiSnips snippet 是可以用的,但是自动提示功能失效了。 这个功能原来是 Completor 这个插件提供的。

https://github.com/maralla/completor.vim

Plugin 'maralla/completor.vim'

首先要确认到底是哪里出了问题。

按照 UltiSnips 文档的说法

https://github.com/SirVer/ultisnips

这个自动提示菜单是其他插件提供的,并不是 UltiSnips 的功能。

The completion menu comes from YouCompleteMe, UltiSnips also integrates with deoplete, and more.

官方推荐了两个插件一个是 YouCompleteMe,另一个是 deoplete。

我决定尝试一下 deoplete,纯好奇。尽管 YouCompleteMe 看起来更靠谱一点。。。

https://github.com/Shougo/deoplete.nvim

Completor 引发的问题

如果不注释掉:

Plugin 'maralla/completor.vim'

每次触发时,都会报错:

Error detected while processing function 20[1]..completor#do[13]..completor#action#do[22]..completor#compat#job_start_oneshot:

注释之后,就没有这个问题了。猜测是不兼容 Neovim 导致。

解决方法

pip3 install msgpack

我觉得下面这行才是关键,打开 Neovim 执行:

:UpdateRemotePlugins

如此,UltiSnips 终于正常工作了。

这是我跟官方安装步骤唯一有出入的地方,因为我用的是 Vundle,而文档里用的是 vim-plug, 而 vim-plug 支持在安装之后执行命令 UpdateRemotePlugins。

Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }

UpdateRemotePlugins 是啥

https://neovim.io/doc/user/remote_plugin.html

Just installing remote plugins to "rplugin/{host}" isn't enough for them to be automatically loaded when required. You must execute |:UpdateRemotePlugins| every time a remote plugin is installed, updated, or deleted.

概要来说,就是安装完插件之后,都需要在 Neovim 中执行 UpdateRemotePlugins 来生成一个 plugin manifest 文件。 好处是,有了这个 manifest 文件,可以加速 Neovim 的启动。

vim-plug vs vundle

这样看来确实 vim-plug 更适合配合 Neovim 使用。 后面有时间再改配置吧。

fish shell 问题

在 fish shell Neovim 中执行 PluginInstall 会报错,需要退回到 zsh 中执行才行。

tags: neovim ultisnips

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式