我正在使用 neovim 插件"coc-nvim"作为 C/C++ 的 IntelliSense 工具。据我所知,这个插件实际上是 ccls、clangd 和 cquery 等语言服务器的客户端。我在我的系统上安装了所有这些语言服务器,并将它们配置为与 coc-nvim 一起使用。所以我可以在我的 c/c++ 文件中获得自动完成和通用头文件列表(例如 stdio 和 ...)。但是由于我在 ros 平台上工作,所以我想将 ros(/opt/ros/kinetic/include/**) 的标头添加到我的语言服务器的默认包含路径中。如果没有这个选项,我必须在每个项目的开头添加一个虚拟 ros 节点并进行编译catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=YES
以生成 compile_commands.json 文件以访问 ros 头文件。
coc.nvim 的设置在 init.vim 文件旁边,在一个名为“coc-settings.json”的文件中,我的 coc 设置文件的内容如下:
{
"languageserver": {
"clangd": {
"command": "clangd",
"rootPatterns": ["compile_flags.txt", "compile_commands.json"],
"filetypes": ["c", "cpp", "objc", "objcpp"]
},
"cquery": {
"command": "/home/amirrezasadeghi/ManBuildLibs/cquery/build/cquery",
"args": ["--log-file=/tmp/cq.log"],
"filetypes": ["c", "cpp"],
"rootPatterns": ["compile_flags.txt", "compile_commands.json", ".git/", ".hg/"],
"initializationOptions": {
"cacheDirectory": "/tmp/cquery"
}
},
"ccls": {
"command": "ccls",
"filetypes": ["c", "cpp", "objc", "objcpp"],
"rootPatterns": [".ccls", "compile_commands.json", ".git/", ".hg/"],
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
}
}
}
},
"clangd.semanticHighlighting": true
}
所以我的主要问题是如何将 ros 包含路径添加到这些设置中。我检查了coc.nvim 的 wiki 页面,但找不到用户包含路径的任何选项。另外,我检查了 clangd 的选项并尝试将 , 添加
"args":["-I/opt/ros/kinetic/include/"]
到相应的块中,但它不起作用。另外,我添加了.cquery文件,但对建议的标题列表仍然没有影响。
对不起,长篇大论,感谢您的时间。
编辑:最好使用 clangd LSP 而不是 ccls。因为它更快并且有更好的文档。谢谢!
编辑(2020 年 4 月 12 日):我发现的最佳解决方案是使用 cclsextraArgs
提供的 ccls 语言服务器。因此,如果您将"clang"
字段添加到 ccls 配置中,我们可以在自动完成中使用 ros 标头。
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
},
"clang": {
"extraArgs": [
"-I",
"/opt/ros/kinetic/include/"
]
}
}
但正如我提到的,如果可能的话,我想使用clangd。我到处检查,但没有答案。谁能帮我?(请!)。