C++
C++ support is available natively in Zed.
- Tree Sitter: tree-sitter/tree-sitter-cpp
- Language Server: clangd/clangd
Binary
You can configure which clangd
binary Zed should use.
To use a binary in a custom location, add the following to your settings.json
:
{
"lsp": {
"clangd": {
"binary": {
"path": "/path/to/clangd",
"arguments": []
}
}
}
}
If you want to disable Zed looking for a clangd
binary, you can set ignore_system_version
to true
:
{
"lsp": {
"clangd": {
"binary": {
"ignore_system_version": true
}
}
}
}
Arguments
You can pass any number of arguments to clangd. To see a full set of available options, run clangd --help
from the command line. For example with --function-arg-placeholders=0
completions contain only parentheses for function calls, while the default (--function-arg-placeholders=1
) completions also contain placeholders for method parameters.
{
"lsp": {
"clangd": {
"binary": {
"path": "/path/to/clangd",
"arguments": ["--function-arg-placeholders=0"]
}
}
}
}
Formatting
By default Zed will use the clangd
language server for formatting C++ code. The Clangd is the same as the clang-format
CLI tool. To configure this you can add a .clang-format
file. For example:
---
BasedOnStyle: LLVM
IndentWidth: 4
---
Language: Cpp
# Force pointers to the type for C++.
DerivePointerAlignment: false
PointerAlignment: Left
---
See Clang-Format Style Options for a complete list of options.
You can trigger formatting via cmd-shift-i|ctrl-shift-i or the editor: format
action from the command palette or by adding format_on_save
to your Zed settings:
"languages": {
"C++": {
"format_on_save": "on",
"tab_size": 2
}
}
More server configuration
In the root of your project, it is generally common to create a .clangd
file to set extra configuration.
CompileFlags:
Add:
- "--include-directory=/path/to/include"
Diagnostics:
MissingIncludes: Strict
UnusedIncludes: Strict
For more advanced usage of clangd configuration file, take a look into their official page.
Compile Commands
For some projects Clangd requires a compile_commands.json
file to properly analyze your project. This file contains the compilation database that tells clangd how your project should be built.
CMake Compile Commands
With CMake, you can generate compile_commands.json
automatically by adding the following line to your CMakeLists.txt
:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
After building your project, CMake will generate the compile_commands.json
file in the build directory and clangd will automatically pick it up.