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 日): 私が見つけた最良の解決策は、extraArgs
ccls によって提供される を使用して、ccls 言語サーバーを使用することです。"clang"
そのため、 ccls 構成にフィールドを追加すると、自動補完で ros ヘッダーを使用できます。
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
},
"clang": {
"extraArgs": [
"-I",
"/opt/ros/kinetic/include/"
]
}
}
しかし、私が述べたように、可能であればclangdを使用したいと思います。あちこち調べましたが、答えはありませんでした。誰でも私を助けることができますか?(お願いします!)。