首先,使用ChristianChiarulli大神的neovim0.5的配置,基本全部基于Lua。
GitHub - ChristianChiarulli/LunarVim: A Neovim config made with sane defaults
这套配置已经搭建了完整的框架,但是需要的LSP server需要自己安装,安装也很简单,直接vim命令行:LspInstall <language-name>
即可,比如此处我们需要的是cmake,那就是:LspInstall cmake
安装完成之后,再加入一点配置信息。首先是cmake启动文件,即cmake-ls.lua
,放置在相应的文件夹下,如下(其实文件名可以随便取):
一个简单的cmake-ls.lua
如下(注意,cmd字段是必填的,这是告诉系统对应的程序在哪条路径下,DATA_PATH
是在根部init.lua中进行定义的):
随后,再在根部init.lua中加入一行require 'lsp.cmake-ls'
即可
然后就可以愉快的自动补全啦!
最后,对于C++工程项目而言,因为包含多个文件,因此需要告诉clangd这个项目是如何构建(build)的。对于cmake-based的工程而言,这很简单,只需要在执行cmake的时候,加上-DCMAKE_EXPORT_COMPILE_COMMANDS=1
这个flag就可以,例如:cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -S . -B build
,那么,一个compile_commands.json
文件就会生成在build文件夹中。之后,再在工程根目录下创建一个软链接即可:ln -s build/compile_commands.json .
即可。这样一来,clangd就知道这个工程是如何进行构建的,就可以更好的执行gd,gr等操作。
- 其实,如果不想写了完整的CMakeLists.txt之后再实现vim的跳转的话,可以事先配置一个环境变量
CPLUS_INCLUDE_PATH
,加入需要搜索的路径,然后export CPLUS_INCLUDE_PATH
,vim(clangd)就知道需要在哪里搜索头文件了。
其他的语言也是一样的。Now enjoy it!