neovim为工作区添加本地clangd配置

1 背景

尝试使用neovim开发stm32,使用clangd作为LSP提供代码补全等功能。

2 思路

  1. 使用stm32cubeMX生成一个基于makefile的stm32工程。

  2. 使用bearcompiledb基于makefile生成compile_commands.json文件。

  3. 为clangd配置--query-driver选项,使其使用arm-none-eabi-gcc编译器。

由于--query-driver选项是直接传递给clangd可执行文件的参数,无法在当前目录下的clangd配置文件(如.clangd)中进行配置。
如果你的neovim的LSP基于coc.nvim进行部署,则该参数可以在coc-settings.json中进行配置,比较方便。
如果你的neovim的LSP基于nvim-lspconfig进行部署,则该参数需要在nvim-lspconfig插件初始化clangd时传入。需要修改lua配置文件,比较麻烦。本文针对此情形提出一种解决方案。

3 解决方案

  1. 启用neovim的exrc特性,允许neovim从当前目录下的.nvim.lua.nvimrc.exrc文件中读取局部的配置。使得开发者能够针对不同项目灵活配置LSP、DAP等,避免频繁修改全局的neovim配置。
  2. 在项目目录中创建.nvim.lua文件,在该文件中重新配置clangd并传入--query-driver参数。

4 具体做法

  1. 在neovim配置中添加set exrc(vimscript) vim.o.exrc = true(lua)。

  2. 在项目目录中创建.nvim.lua文件。

  3. .nvim.lua文件中写入如下内容:

lua 复制代码
require("lspconfig").clangd.setup({
  cmd = {
    "clangd",
    "--query-driver=*arm-none-eabi*",
    -- NOTE:使用如下绝对路径时反而无效
    -- "--query-driver=${path_to_compiler}\\gcc-arm-none-eabi\\12.2.rel1\\bin\\arm-none-eabi*",
  },
  filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto" },
})
相关推荐
Eternity∞18 小时前
数据结构基础
c语言·开发语言·数据结构·学习·vim
钟智强2 天前
CVE-2025-49844高危预警:Redis Lua脚本引擎UAF漏洞深度剖析与POC实战
数据库·redis·web安全·junit·lua
闲人编程2 天前
聚合管道与复杂查询
开发语言·oracle·lua·match·查询·聚合·lookup
会周易的程序员3 天前
cNetgate物联网网关内存数据表和数据视图模块架构
c语言·c++·物联网·架构·lua·iot
会周易的程序员4 天前
cNetgate插件架构设计详解 动态库 脚本二开lua, python, javascript
javascript·c++·python·物联网·lua·iot
晚风_END5 天前
Linux|操作系统|小技巧---vim编辑的脚本自动添加shebang 和注释
linux·运维·vim
我怎么又饿了呀5 天前
Linux 下 的Vim/Vi 操作指南
linux·运维·vim
QmZVLlLHvXq7 天前
3D CNN-GRU-Att结合模型:负荷预测、PM2.5预测、光伏预测等实验的代码实现
vim
白太岁8 天前
Redis:(3) Lua 与 Redis、基于连接池的 Facade 模式封装
数据库·c++·redis·lua·外观模式
承渊政道9 天前
Linux系统学习【深入剖析Git的原理和使用(下)】
linux·服务器·git·学习·gitee·vim·gitcode