3

C/C++ の IntelliSense ツールとして、neovim プラグイン「coc-nvim」を使用しています。私が知っているように、このプラグインは実際には 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 の設定は、「coc-settings.json」というファイルの init.vim ファイルと一緒にあり、私の 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ファイルを追加しましたが、提案されたヘッダーのリストには影響しません。

長い話で申し訳ありませんが、お時間をいただきありがとうございます。

編集: ccls ではなく、clangd LSP を使用する方がよいでしょう。より高速で、ドキュメントが優れているためです。ありがとう!

編集 (2020 年 4 月 12 日): 私が見つけた最良の解決策は、extraArgsccls によって提供される を使用して、ccls 言語サーバーを使用することです。"clang"そのため、 ccls 構成にフィールドを追加すると、自動補完で ros ヘッダーを使用できます。

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

しかし、私が述べたように、可能であればclangdを使用したいと思います。あちこち調べましたが、答えはありませんでした。誰でも私を助けることができますか?(お願いします!)。

4

2 に答える 2