如何在coc-settings.json文件中添加语言服务器的包含路径?

问题描述 投票:0回答:1

我正在使用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。因为它速度更快并且文档更好。谢谢!

c++ c vim-plugin neovim clangd
1个回答
0
投票

我发现的最佳解决方案是通过使用ccls提供的extraArgs使用ccls语言服务器。因此,如果将"clang"字段添加到ccls配置中,我们可以在自动填充中包含ros标头。

"initializationOptions": {                                                                                        
                                    "cache": {                                                                                                
                                            "directory": "/tmp/ccls"                
                                    },                                              
                                    "clang": {                                      
                                            "extraArgs": [                          
                                                    "-I",                           
                                                    "/opt/ros/kinetic/include/"     
                                            ]                                       
                                    }                                               
                            }

但正如我提到的,如果可能的话,我想使用clangd。我到处检查,但没有答案。谁能帮助我?(请!)。

© www.soinside.com 2019 - 2024. All rights reserved.