我正在使用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 include路径。我检查了wiki page of coc.nvim,但找不到用户包含路径的任何选项。另外,我检查了clangd选项并尝试添加"args":["-I/opt/ros/kinetic/include/"]
,到相应的块,但它不起作用。另外,我添加了.cquery文件,但对建议的标头列表仍然没有影响。
很抱歉,很长的故事,感谢您的宝贵时间。
编辑:最好使用clangd LSP而不是ccls。因为它速度更快并且文档更好。谢谢!
我发现的最佳解决方案是通过使用ccls提供的extraArgs
使用ccls语言服务器。因此,如果将"clang"
字段添加到ccls配置中,我们可以在自动填充中包含ros标头。
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
},
"clang": {
"extraArgs": [
"-I",
"/opt/ros/kinetic/include/"
]
}
}
但正如我提到的,如果可能的话,我想使用clangd。我到处检查,但没有答案。谁能帮助我?(请!)。