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.