neovim为工作区添加本地clangd配置
1 背景
尝试使用neovim开发stm32,使用clangd作为LSP提供代码补全等功能。
2 思路
-
使用stm32cubeMX生成一个基于makefile的stm32工程。
-
使用
bear
或compiledb
基于makefile生成compile_commands.json
文件。 -
为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 解决方案
- 启用neovim的
exrc
特性,允许neovim从当前目录下的.nvim.lua
、.nvimrc
或.exrc
文件中读取局部的配置。使得开发者能够针对不同项目灵活配置LSP、DAP等,避免频繁修改全局的neovim配置。 - 在项目目录中创建
.nvim.lua
文件,在该文件中重新配置clangd并传入--query-driver
参数。
4 具体做法
-
在neovim配置中添加
set exrc
(vimscript)或vim.o.exrc = true
(lua)。 -
在项目目录中创建
.nvim.lua
文件。 -
在
.nvim.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" }, })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了