C

Zed 原生支持 C 语言。

Clangd: 强制检测为 C 语言

Clangd 默认假定项目是 C++/C 混合项目。如果您的项目只包含 C 语言,您可能希望通过使用 -xc 标志指示 clangd 将所有文件视为 C 语言。为此,请在项目根目录中创建一个 .clangd 文件,内容如下:

CompileFlags:
  Add: [-xc]

默认情况下,clang 和 gcc 会将 *.C*.H(大写扩展名)识别为 C++ 而非 C,Zed 也遵循此约定。如果您正在处理一个纯 C 项目(可能包含像 FILENAME.C 这样的旧式大写路径),您可以通过将以下内容添加到您的设置中来覆盖此行为:

{
  "file_types": {
    "C": ["C", "H"]
  }
}

格式化

默认情况下,Zed 将使用 clangd 语言服务器来格式化 C 代码。Clangd 与 clang-format 命令行工具相同。要配置它,您可以添加一个 .clang-format 文件。例如:

---
BasedOnStyle: GNU
IndentWidth: 2
---

有关选项的完整列表,请参阅 Clang-Format 样式选项

您可以通过 cmd-shift-i|ctrl-shift-i 或命令面板中的 editor: format 操作触发格式化,或者通过将 format_on_save 添加到您的 Zed 设置中来触发格式化。

  "languages": {
    "C": {
      "format_on_save": "on",
      "tab_size": 2
    }
  }

编译命令

对于某些项目,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 调试原生二进制文件。(请确保您的构建过程将 -g 传递给 C 编译器,以便调试信息包含在生成的二进制文件中。)有关可以添加到 .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"
  }
]