第60章 Zed 编辑器 C 语言开发指南:配置 Clangd 与格式化
Zed 原生支持 C 语言开发。
- 语法解析器(Tree-sitter):tree-sitter/tree-sitter-c
- 语言服务器(Language Server):clangd/clangd
- 调试适配器(Debug Adapter):CodeLLDB(主要),GDB(次要,在 Apple Silicon 芯片上不可用)
Clangd:强制识别为 C 语言
Clangd 默认假设项目是 C++/C 混合编写的。如果仅使用 C 语言,可以指示 clangd 将文件作为 C 语言处理,方法是使用 -xc 标志。具体做法是在项目根目录创建 .clangd 文件,内容如下:
# yaml-language-server: $schema=https://json.schemastore.org/clangd.json
CompileFlags:
Add: [-xc]
通常情况下,clang 和 gcc 会将 *.C 和 *.H(大写后缀)识别为 C++ 而非 C,Zed 也遵循这一惯例。如果正在处理纯 C 项目(例如包含旧式大写路径 FILENAME.C 的项目),可以通过在设置中添加以下配置来覆盖此行为:
{
"file_types": {
"C": ["C", "H"]
}
}
格式化
默认情况下,Zed 会利用 clangd 语言服务器对 C 代码进行格式化,行为类似于 clang-format 命令行工具。通过添加 .clang-format 文件即可进行配置,例如:
# yaml-language-server: $schema=https://json.schemastore.org/clang-format-21.x.json
---
BasedOnStyle: GNU
IndentWidth: 2
---
完整的选项列表参见 Clang-Format Style Options。
可以通过快捷键 {#kb editor::Format} 或从命令面板中调用 {#action editor::Format} 操作来触发格式化,也可以启用“保存时自动格式化”。
可以在设置({#kb zed::OpenSettings})中的 Languages > C 下配置格式化选项,或在设置文件中添加以下内容:
"languages": {
"C": {
"format_on_save": "on",
"tab_size": 2
}
}
编译指令(Compile Commands)
某些项目使用 Clangd 时需要 compile_commands.json 文件才能正确分析代码。该文件包含编译数据库,告诉 clangd 项目应该如何构建。
CMake 编译命令
使用 CMake 时,只需在 CMakeLists.txt 中加入下面这行,即可自动生成 compile_commands.json:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
构建项目后,CMake 会在构建目录中生成 compile_commands.json,clangd 会自动识别它。
调试
你可以使用 CodeLLDB 或 GDB 调试原生二进制文件。(注意构建时需给 C 编译器传入 -g 参数,让生成的二进制文件包含调试信息。)以下是可添加到 .zed/debug.json 的调试配置示例。
构建并调试二进制文件
[
{
"label": "Debug native binary",
"build": {
"command": "make",
"args": ["-j8"],
"cwd": "$ZED_WORKTREE_ROOT"
},
"program": "$ZED_WORKTREE_ROOT/build/prog",
"request": "launch",
"adapter": "CodeLLDB"
}
]