更多分享内容可访问我的个人博客
本文介绍 vim 自动补全方案。主要采用更强大的 coc.nvim 插件来替代 YCM。
vim 自动补全
前言
自动补全对于任何一个试图取代 IDE 的编辑器的重要性不言而喻。想要将 vim 打造为最契合自己的 IDE,无论如何都不能少了强大的自动补全功能。
coc.nvim 介绍
coc.nvim 是针对 neovim 开发的的功能非常强大,完全可以替代 YCM,带来更加优越的补全体验。包括语义补全、片段补全、定义跳转、文档查阅、静态检查等等。
同时 coc.nvim 也是一个全新的插件平台,除了其原生插件外,理论上也支持所有纯 JS 实现的 vscode 插件。拥有 coc.nvim,就拥有了一个异步插件平台。
coc.nvim 安装
coc.nvim 需要nodejs
支持。安装nodejs
后,用插件管理器安装 coc.nvim 即可。具体可参考其github 主页。
使用 coc.nvim 进行补全
coc.nvim 的补全可以采用安装插件或者配置 lsp 实现。
语义补全及静态检查
以 rust 语言为例,可以直接使用:CocInstall
安装coc-rust-analyzer
插件(会自动安装rust-analyzer
)。也可以在安装rust-analyzer
后在 coc.nvim 的配置文件中配置。使用:CocConfig
打开配置文件,写入
{
"languageserver": {
"rust": {
"command": "rust-analyzer",
"filetypes": ["rust"],
"rootPatterns": ["Cargo.toml"]
}
}
}
注意command
必须保证可用。
关于coc插件以及lsp配置的具体内容可以参考coc.nvim wiki。
到此,rust语言的自动补全已经配置完成,静态检查也同步配置完成。但仅仅如此还不可以使用。coc.nvim的自动配置在项目工程中才能起作用。如单独编写一个main.rs
,则不会有语义提示。必须以cargo new demo
新建一个工程,插件检测到Cargo.toml
后才会启动语义的自动补全。当然也有可以直接在单文件中提示的特例,如markdown语言,本身就不存在工程的概念。
片段补全
安装coc-actions
插件。
再在coc-snippets
、coc-ultisnips
中选择一个或全选即可。注意需要同步安装honza/vim-snippets
、SirVer/ultisnips
。
自定义snippets可见另一篇博客。
自定义补全源
coc.nvim默认的补全源来自当前打开的所有buffer、插件或lsp等。此外也可以自定义补全源。具体可参见coc.nvim wiki
下面以补全markdown中的latex语法为例,展示如何自定义补全源。
创建目录~/.config/nvim/autoload/coc/source
。这里以linux系统为例,其他系统的位置可以自行参考wiki。
创建latex.v