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
でコンパイルして、rosヘッダーにアクセスするためのcompile_commands.jsonファイルを生成する必要があります。
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 includeパスをこれらの設定に追加する方法です。 coc.nvimのwikiページ を確認しましたが、ユーザーインクルードパスのオプションが見つかりません。また、clangdのオプションをチェックして、対応するブロックに"args":["-I/opt/ros/kinetic/include/"]
を追加しようとしましたが、機能しませんでした。また、 。cquery ファイルを追加しましたが、提案されたヘッダーのリストにはまだ影響がありません。
長い話でごめんなさい、そしてあなたの時間をありがとう。
編集:cclsよりもclangd LSPを使用する方が良いでしょう。より速く、より良いドキュメントがあるからです。ありがとう!
編集(2020年4月12日):私が見つけた最良の解決策は、cclsによって提供されるextraArgs
を使用してccls言語サーバーを使用することです。したがって、"clang"
フィールドをccls configsに追加すると、自動補完でrosヘッダーを使用できます。
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
},
"clang": {
"extraArgs": [
"-I",
"/opt/ros/kinetic/include/"
]
}
}
しかし、前述したように、可能であればclangdを使用したいと思います。どこでも調べましたが、答えはありませんでした。誰か私を助けてくれますか? (お願いします!)。
これはあなたが尋ねた方法で問題を解決するわけではありませんが、私はそれが有用な解決策であることがわかりました。
あなたのように、私はcatkin_make
を使用してcompile_commands.json
を生成しました。
catkin_make --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=1
ただし、<catkin_ws>/build/compile_commands.json
と<catkin_ws>/compile_commands.json
の間にシンボリックリンクを作成しました。 clangdはcompile_commands.json
の親ディレクトリを検索するため、ワークスペース内の任意のパッケージ/ノードからアクセスできます。
したがって、ワークスペース全体に対してcompile_commands.json
を1つだけ生成する必要があり、依存関係が変更されるたびに再生成するだけで済みます。
coc-nvim
にはそれを設定するオプションがないようです。最良のオプションは、LSPオプションに依存することです。
カスタム.ccls
ファイルを定義してccls
を解決し、ブーストインクルードを指す-I
オプションを追加しました。その.ccls
ファイルは、プロジェクトのルートにある必要があります。例えば。:
clang
%c
-I/usr/local/include
clangd
にも同じオプションが必要です。