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

1 背景

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

2 思路

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

  2. 使用bear或compiledb基于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" },
})
相关推荐
幸运小圣2 天前
Buffer 新手入门【Node.js】
node.js·编辑器·vim
二喵❥(^_-)3 天前
接口测试流程的三个核心环节
开发语言·lua
lzx_0023 天前
Linux 开发工具(二) 简单认识一下编辑器 —— vim
linux·编辑器·vim
此生决int4 天前
Linux系列(04)——基础开发工具(上)软件包管理器、vim、gcc/g++
linux·服务器·vim
geats人山人海5 天前
linux 2 基本操作与vim
linux·运维·vim
星恒随风9 天前
Linux开发工具详解(一):软件包管理、Vim、GCC/G++、Makefile与进度条实战
linux·运维·笔记·学习·vim
小师兄吃牛肉9 天前
C++ 与 Lua 的协程交互:从原理到实战
c++·lua·交互
喜欢的名字被抢了9 天前
09-Redis 进阶原理篇:单线程、多线程、过期、LRU-LFU、Fork 与 Lua
数据库·redis·lua
白山编程大哥9 天前
Lua 中使用 C 语言的用户自定义类型——userdata
c语言·junit·lua
开开心心就好9 天前
超市定时播音软件,免费版支持循环播放
智能手机·ffmpeg·ocr·word·vim·音视频·visual studio