LoongArch 机器配置 Vim + coc.nvim + clangd 记录

环境信息

目标机器:

robin@10.180.135.190

检查结果:

架构: loongarch64
系统: OpenCloudOS 9.4
内核: 6.6.119-49.18.oc9.loongarch64
Vim: /usr/bin/vim 9.0
Node.js: /usr/bin/node v18.20.8
clangd: /usr/bin/clangd 17.0.6
coc-clangd: 0.33.0

clangd --version 输出中可以看到:

Platform: loongarch64-unknown-linux-gnu
target=loongarch64-opencloudos-linux-gnu

说明当前 clangd 是 LoongArch 可用版本。

需要安装的软件

coc.nvim 依赖 Node.js,coc-clangd 依赖系统里的 clangd 二进制。

在 OpenCloudOS 9.4 LoongArch 上可使用:

sudo dnf install nodejs clang-tools-extra

包对应关系:

nodejs             -> 提供 /usr/bin/node
clang-tools-extra  -> 提供 /usr/bin/clangd

如果需要更新版本的 LLVM/clangd,也可以选择工具链包,例如:

sudo dnf install llvm-toolset-20-clang-tools-extra

这类包的 clangd 通常位于:

/opt/OpenCloudOS/llvm-toolset-20/root/usr/bin/clangd

如果使用该路径,需要在 coc 配置里显式指定 clangd.path

安装 coc-clangd

在 Vim 中执行:

:CocInstall coc-clangd

本次安装结果:

coc-clangd Move extension coc-clangd@0.33.0 to
/home/robin/.config/coc/extensions/node_modules/coc-clangd

检查命令

在目标机器上执行:

command -v node
node --version

command -v clangd
clangd --version

test -d ~/.config/coc/extensions/node_modules/coc-clangd && echo coc-clangd-installed

本次确认结果:

/usr/bin/clangd
clangd version 17.0.6 (OpenCloudOS 17.0.6-8.oc9.ap.2)
/usr/bin/node
v18.20.8
coc-clangd-installed

推荐 Coc 配置

编辑 Coc 配置:

:CocConfig

可加入:

{
  "clangd.path": "/usr/bin/clangd",
  "clangd.arguments": [
    "--background-index",
    "--completion-style=detailed",
    "--header-insertion=never"
  ]
}

如果使用 llvm-toolset-20 的 clangd,则改成类似:

{
  "clangd.path": "/opt/OpenCloudOS/llvm-toolset-20/root/usr/bin/clangd",
  "clangd.arguments": [
    "--background-index",
    "--completion-style=detailed",
    "--header-insertion=never"
  ]
}

项目侧配置

coc-clangd 能否准确补全、跳转、诊断,关键取决于项目根目录是否有正确的编译数据库:

compile_commands.json

CMake 项目可使用:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ...

普通 Makefile 项目可尝试:

bear -- make

Linux kernel 项目常见方式是生成 clangd 可读的编译数据库,例如使用内核脚本:

./scripts/clang-tools/gen_compile_commands.py

如果源码目录和构建目录分离,需要在源码目录放置或链接生成的 compile_commands.json

ln -s /path/to/build/compile_commands.json /path/to/source/compile_commands.json

验证方式

打开一个 C/C++ 源文件后,在 Vim 中执行:

:CocInfo

需要确认:

clangd language server 已启动
没有提示 clangd executable not found

可测试功能:

gd          " 跳转定义
gr          " 查找引用
:CocList diagnostics
:CocCommand clangd.restart

常见问题

1. coc-clangd 已安装,但没有补全

优先检查:

command -v clangd
clangd --version

如果 clangd 不存在,需要安装 clang-tools-extra

2. 有补全但跳转不准,或者大量误报

通常是项目缺少正确的 compile_commands.json,或者编译参数不完整。需要按项目真实构建方式生成编译数据库。

3. 使用交叉编译项目时头文件找不到

需要保证 compile_commands.json 中包含真实的交叉编译参数、sysroot、include 路径和宏定义。clangd 只按编译数据库理解项目,不会自动推断复杂构建环境。

4. Vim 中 Coc 没启动

检查 Node.js:

node --version

再检查 Vim 中:

:CocInfo

如果 Coc 插件本身没有安装或没有加载,需要先修复 coc.nvim 的 Vim 插件安装。

当前结论

LoongArch 机器可以使用 vim + coc.nvim + clangd。本次检查的 robin@10.180.135.190 已具备:

Node.js
clangd 17.0.6
coc-clangd 0.33.0

后续只需要针对具体 C/C++ 项目准备正确的 compile_commands.json,即可正常使用补全、跳转和诊断功能。