Я использую плагин neovim "co c -nvim" в качестве инструмента IntelliSense для C / C ++. насколько я знаю, этот плагин на самом деле является клиентом языковых серверов, таких как ccls, clangd и cquery. У меня все эти языковые серверы установлены в моей системе и настроены для работы с co c -nvim. так что я могу получить автозаполнение и список общих заголовков (например, stdio и ...) в моих файлах c / c ++. но так как я работаю на платформе ros, я хочу добавить заголовки ros (/ opt / ros / kinetic / include / **) к моему пути по умолчанию для языковых серверов. без этой опции в начале каждого проекта я должен добавить фиктивный узел ros и скомпилировать с catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=YES
, чтобы сгенерировать файл compile_commands. json, чтобы получить доступ к заголовкам ros.
настройки co c .nvim находится рядом с файлом init.vim, в файле с именем "co c -settings. json", а содержимое моего файла настроек co c указано ниже:
{
"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 path к этим настройкам. Я проверил вики-страницу со c .nvim , но не могу найти никакой опции для пути включения пользователя. Кроме того, я проверил опцию clangd и попытался добавить "args":["-I/opt/ros/kinetic/include/"]
к соответствующему блоку, но он не работал. Кроме того, я добавил файл .cquery , но по-прежнему не влияет на список предлагаемых заголовков.
извините за длинную историю и спасибо за ваше время.
Редактировать : было бы лучше использовать clangd LSP, а не ccls. потому что это быстрее и имеет лучшую документацию. спасибо!
Редактировать (12 апреля 2020 г.): лучшее решение, которое я нашел, это использование языкового сервера ccls с использованием extraArgs
, предоставляемого ccls. поэтому, если вы добавите поле "clang"
к конфигам ccls, у нас могут быть заголовки ro в автозаполнении.
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
},
"clang": {
"extraArgs": [
"-I",
"/opt/ros/kinetic/include/"
]
}
}
, но, как я уже упоминал, я хотел бы использовать clangd, если это возможно. Я проверил везде, но нет ответа. Может кто-нибудь мне помочь? (Пожалуйста!).