docs/src/reference/all-settings.md
This is the complete reference for all Zed settings.
You may also want to change your theme, configure your key bindings, set up tasks, or install extensions.
The sections below document supported Zed settings.
active_pane_modifiers{
"active_pane_modifiers": {
"border_size": 0.0,
"inactive_opacity": 1.0
}
}
border_size0.0Options
Non-negative float values
inactive_opacity1.0Options
float values
bottom_dock_layout"contained"Options
{
"bottom_dock_layout": "contained"
}
{
"bottom_dock_layout": "full"
}
{
"bottom_dock_layout": "left_aligned"
}
{
"bottom_dock_layout": "right_aligned"
}
agent_font_sizenullOptions
integer values from 6 to 100 pixels (inclusive)
allow_rewrap"in_comments"Options
{
"allow_rewrap": "in_comments"
}
{
"allow_rewrap": "in_selections"
}
{
"allow_rewrap": "anywhere"
}
Note: This setting has no effect in Vim mode, as rewrap is already allowed everywhere.
auto_indenttrueOptions
boolean values
auto_indent_on_pastetrueOptions
boolean values
auto_install_extensions{ "html": true }Options
You can find the names of your currently installed extensions by listing the subfolders under the extension installation location:
On macOS:
ls ~/Library/Application\ Support/Zed/extensions/installed/
On Linux:
ls ~/.local/share/zed/extensions/installed
Define extensions which should be installed (true) or never installed (false).
{
"auto_install_extensions": {
"html": true,
"dockerfile": true,
"docker-compose": false
}
}
autosaveoffOptions
off:{
"autosave": "off"
}
on_focus_change:{
"autosave": "on_focus_change"
}
on_window_change:{
"autosave": "on_window_change"
}
after_delay:{
"autosave": {
"after_delay": {
"milliseconds": 1000
}
}
}
Note that a save will be triggered when an unsaved tab is closed, even if this is earlier than the configured inactivity period.
autoscroll_on_clicksfalseOptions
boolean values
auto_signature_helpfalseOptions
boolean values
auto_signature_help is enabled, this setting will be treated as enabled also.show_signature_help_after_editsfalseOptions
boolean values
auto_updatetrueOptions
boolean values
base_keymapVSCodeOptions
{
"base_keymap": "VSCode"
}
{
"base_keymap": "Atom"
}
{
"base_keymap": "JetBrains"
}
{
"base_keymap": "None"
}
{
"base_keymap": "SublimeText"
}
{
"base_keymap": "TextMate"
}
buffer_font_family.ZedMono. This currently aliases to Lilex.Options
The name of any font family installed on the user's system, or ".ZedMono".
buffer_font_featuresnullOptions
Zed supports all OpenType features that can be enabled or disabled for a given buffer or terminal font, as well as setting values for font features.
For example, to disable font ligatures, add the following to your settings:
{
"buffer_font_features": {
"calt": false
}
}
You can also set other OpenType features, like setting cv01 to 7:
{
"buffer_font_features": {
"cv01": 7
}
}
buffer_font_fallbacksnullOptions
For example, to use Nerd Font as a fallback, add the following to your settings:
{
"buffer_font_fallbacks": ["Nerd Font"]
}
buffer_font_size15Options
A font size from 6 to 100 pixels (inclusive)
buffer_font_weight400Options
integer values between 100 and 900
buffer_line_height"comfortable"Options
"standard", "comfortable" or { "custom": float } (1 is compact, 2 is loose)
centered_layout{
"centered_layout": {
"left_padding": 0.2,
"right_padding": 0.2
}
}
Options
The left_padding and right_padding options define the relative width of the
left and right padding of the central pane from the workspace when the centered layout mode is activated. Valid values range is from 0 to 0.4.
close_on_file_deletefalseOptions
boolean values
When enabled, this setting will automatically close tabs for files that have been deleted from the file system. This is particularly useful for workflows involving temporary or scratch files that are frequently created and deleted. When disabled (default), deleted files remain open with a strikethrough through their tab title.
Note: Dirty files (files with unsaved changes) will not be automatically closed even when this setting is enabled, ensuring you don't lose unsaved work.
confirm_quitfalseOptions
boolean values
diagnostics_max_severitynullOptions
{
"diagnostics_max_severity": "all"
}
{
"diagnostics_max_severity": "error"
}
{
"diagnostics_max_severity": "warning"
}
{
"diagnostics_max_severity": "info"
}
{
"diagnostics_max_severity": "hint"
}
diff_view_style"split"Options
"unified": Show changes inline with added and deleted lines stacked vertically"split": Display old and new versions side by side in separate panes (default)See Git documentation for more details.
disable_aifalseOptions
boolean values
direnv to be installed.
direnv integration make it possible to use the environment variables set by a direnv configuration to detect some language servers in $PATH instead of installing them.
It also allows for those environment variables to be used in tasks.load_direnv"direct"Options
There are three options to choose from:
shell_hook: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.direct: Use direnv export json to load direnv. This will load direnv directly without relying on the shell hook and might cause some inconsistencies. This allows direnv to work with any shell.disabled: No shell environment will be loaded automatically; direnv must be invoked manually (e.g. with direnv exec) to be used.double_click_in_multibuffer"select"Options
{
"double_click_in_multibuffer": "select"
}
{
"double_click_in_multibuffer": "open"
}
For the case of "open", regular selection behavior can be achieved by holding alt when double clicking.
drop_target_size0.2Options
float values between 0 and 0.5
edit_predictions "edit_predictions": {
"disabled_globs": [
"**/.env*",
"**/*.pem",
"**/*.key",
"**/*.cert",
"**/*.crt",
"**/.dev.vars",
"**/secrets.yml"
]
}
Options
disabled_globs["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/.dev.vars", "**/secrets.yml"]Options
List of string values.
edit_predictions_disabled_in[]Options
List of string values
{
"edit_predictions_disabled_in": ["comment"]
}
{
"edit_predictions_disabled_in": ["comment", "string"]
}
{
"languages": {
"Go": {
"edit_predictions_disabled_in": ["comment", "string"]
}
}
}
current_line_highlightallOptions
{
"current_line_highlight": "none"
}
{
"current_line_highlight": "gutter"
}
{
"current_line_highlight": "line"
}
{
"current_line_highlight": "all"
}
selection_highlighttruerounded_selectiontruecursor_blinktrueOptions
boolean values
cursor_shapebarOptions
{
"cursor_shape": "bar"
}
{
"cursor_shape": "block"
}
{
"cursor_shape": "underline"
}
{
"cursor_shape": "hollow"
}
gutter{
"gutter": {
"line_numbers": true,
"runnables": true,
"breakpoints": true,
"folds": true,
"min_line_number_digits": 4
}
}
Options
line_numbers: Whether to show line numbers in the gutterrunnables: Whether to show runnable buttons in the gutterbreakpoints: Whether to show breakpoints in the gutterfolds: Whether to show fold buttons in the guttermin_line_number_digits: Minimum number of characters to reserve space for in the gutterhide_mouseon_typing_and_movementOptions
{
"hide_mouse": "never"
}
{
"hide_mouse": "on_typing"
}
{
"hide_mouse": "on_typing_and_movement"
}
snippet_sort_orderinlineOptions
{
"snippet_sort_order": "top"
}
{
"snippet_sort_order": "inline"
}
{
"snippet_sort_order": "bottom"
}
{
"snippet_sort_order": "none"
}
scrollbar{
"scrollbar": {
"show": "auto",
"cursors": true,
"git_diff": true,
"search_results": true,
"selected_text": true,
"selected_symbol": true,
"diagnostics": "all",
"axes": {
"horizontal": true,
"vertical": true
}
}
}
showautoOptions
{
"scrollbar": {
"show": "auto"
}
}
{
"scrollbar": {
"show": "system"
}
}
{
"scrollbar": {
"show": "always"
}
}
{
"scrollbar": {
"show": "never"
}
}
cursorstrueCursor indicators appear as small marks on the scrollbar showing where other collaborators' cursors are positioned in the file.
Options
boolean values
git_difftrueGit diff indicators appear as colored marks showing lines that have been added, modified, or deleted compared to the git HEAD.
Options
boolean values
search_resultstrueSearch result indicators appear as marks showing all locations in the file where your current search query matches.
Options
boolean values
selected_texttrueSelected text indicators appear as marks showing all occurrences of the currently selected text throughout the file.
Options
boolean values
selected_symboltrueSelected symbol indicators appear as marks showing all occurrences of the currently selected symbol (like a function or variable name) throughout the file.
Options
boolean values
diagnosticsallDiagnostic indicators appear as colored marks showing errors, warnings, and other language server diagnostics at their corresponding line positions in the file.
Options
{
"scrollbar": {
"diagnostics": "all"
}
}
{
"scrollbar": {
"diagnostics": "none"
}
}
{
"scrollbar": {
"diagnostics": "error"
}
}
{
"scrollbar": {
"diagnostics": "warning"
}
}
{
"scrollbar": {
"diagnostics": "information"
}
}
axes{
"scrollbar": {
"axes": {
"horizontal": true,
"vertical": true
}
}
}
horizontaltrueOptions
boolean values
verticaltrueOptions
boolean values
minimap{
"minimap": {
"show": "never",
"thumb": "always",
"thumb_border": "left_open",
"current_line_highlight": null
}
}
showneverOptions
{
"minimap": {
"show": "always"
}
}
{
"minimap": {
"show": "auto"
}
}
{
"minimap": {
"show": "never"
}
}
thumbalwaysOptions
{
"minimap": {
"thumb": "hover"
}
}
{
"minimap": {
"thumb": "always"
}
}
thumb_borderleft_openOptions
{
"minimap": {
"thumb_border": "full"
}
}
{
"minimap": {
"thumb_border": "left_open"
}
}
{
"minimap": {
"thumb_border": "right_open"
}
}
{
"minimap": {
"thumb_border": "left_only"
}
}
{
"minimap": {
"thumb_border": "none"
}
}
current_line_highlightnullOptions
{
"minimap": {
"current_line_highlight": null
}
}
{
"minimap": {
"current_line_highlight": "line"
}
}
or
{
"minimap": {
"current_line_highlight": "all"
}
}
{
"minimap": {
"current_line_highlight": "gutter"
}
}
or
{
"minimap": {
"current_line_highlight": "none"
}
}
tab_bar{
"tab_bar": {
"show": true,
"show_nav_history_buttons": true,
"show_tab_bar_buttons": true
}
}
showtrueOptions
boolean values
show_nav_history_buttonstrueOptions
boolean values
show_tab_bar_buttonstrueOptions
boolean values
tabs{
"tabs": {
"close_position": "right",
"file_icons": false,
"git_status": false,
"activate_on_close": "history",
"show_close_button": "hover",
"show_diagnostics": "off"
}
}
close_positionrightOptions
{
"tabs": {
"close_position": "right"
}
}
{
"tabs": {
"close_position": "left"
}
}
file_iconsfalsegit_statusfalseactivate_on_closehistoryOptions
{
"tabs": {
"activate_on_close": "history"
}
}
{
"tabs": {
"activate_on_close": "neighbour"
}
}
{
"tabs": {
"activate_on_close": "left_neighbour"
}
}
show_close_buttonhoverOptions
{
"tabs": {
"show_close_button": "hover"
}
}
{
"tabs": {
"show_close_button": "always"
}
}
{
"tabs": {
"show_close_button": "hidden"
}
}
show_diagnosticsoffOptions
{
"tabs": {
"show_diagnostics": "off"
}
}
{
"tabs": {
"show_diagnostics": "errors"
}
}
{
"tabs": {
"show_diagnostics": "all"
}
}
inline_code_actionstrueOptions
boolean values
session{
"session": {
"restore_unsaved_buffers": true,
"trust_all_worktrees": false
}
}
Options
{
"session": {
"restore_unsaved_buffers": true
}
}
If this is true, user won't be prompted whether to save/discard dirty files when closing the application.
{
"session": {
"trust_all_worktrees": false
}
}
When trusted, project settings are synchronized automatically, language and MCP servers are downloaded and started automatically.
delay is the milliseconds that must elapse before drag and drop is allowed. Otherwise, a new text selection is created.drag_and_drop_selection{
"drag_and_drop_selection": {
"enabled": true,
"delay": 300
}
}
toolbar{
"toolbar": {
"breadcrumbs": true,
"quick_actions": true,
"selections_menu": true,
"agent_review": true,
"code_actions": false
}
}
Options
Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
use_system_window_tabsfalseOptions
This setting enables integration with macOS’s native window tabbing feature. When set to true, Zed windows can be grouped together as tabs in a single macOS window, following the system-wide tabbing preferences set by the user (such as "Always", "In Full Screen", or "Never"). This setting is only available on macOS.
enable_language_servertrueOptions
boolean values
ensure_final_newline_on_savetrueOptions
boolean values
expand_excerpt_lines5Options
Positive integer values
excerpt_context_lines2Options
Positive integer value between 1 and 32. Values outside of this range will be clamped to this range.
extend_comment_on_newlinetrueOptions
boolean values
status_bar{
"status_bar": {
"active_language_button": true,
"cursor_position_button": true,
"line_endings_button": false
}
}
There is an experimental setting that completely hides the status bar. This causes major usability problems (you will be unable to use many of Zed's features), but is provided for those who value screen real-estate above all else.
"status_bar": {
"experimental.show": false
}
lspnullOptions
The following settings can be overridden for specific language servers:
initialization_optionssettingsTo override configuration for a language server, add an entry for that language server's name to the lsp value.
Some options are passed via initialization_options to the language server. These are for options which must be specified at language server startup and when changed will require restarting the language server.
For example to pass the check option to rust-analyzer, use the following configuration:
{
"lsp": {
"rust-analyzer": {
"initialization_options": {
"check": {
"command": "clippy" // rust-analyzer.check.command (default: "check")
}
}
}
}
}
While other options may be changed at a runtime and should be placed under settings:
{
"lsp": {
"yaml-language-server": {
"settings": {
"yaml": {
"keyOrdering": true // Enforces alphabetical ordering of keys in maps
}
}
}
}
}
global_lsp_settings{
"global_lsp_settings": {
"button": true,
"request_timeout": 120,
"notifications": {
// Timeout in milliseconds for automatically dismissing language server notifications.
// Set to 0 to disable auto-dismiss.
"dismiss_timeout_ms": 5000
}
}
}
Options
button: Whether to show the LSP status button in the status barrequest_timeout: The maximum amount of time to wait for responses from language servers, in seconds. A value of 0 will result in no timeout being applied (causing all LSP responses to wait indefinitely until completed). Default: 120notifications: Notification-related settings.
dismiss_timeout_ms: Timeout in milliseconds for automatically dismissing language server notifications. Set to 0 to disable auto-dismiss.lsp_highlight_debounce75Options
integer values representing milliseconds
features{
"edit_predictions": {
"provider": "zed"
}
}
edit_prediction_provider"zed"Options
{
"edit_predictions": {
"provider": "zed"
}
}
{
"edit_predictions": {
"provider": "copilot"
}
}
{
"edit_predictions": {
"provider": "none"
}
}
format_on_saveonOptions
on, enables format on save obeying formatter setting:{
"format_on_save": "on"
}
off, disables format on save:{
"format_on_save": "off"
}
formatterautoOptions
"language_server":{
"formatter": "language_server"
}
"external". Specify the name of the formatting program to run, and an array of arguments to pass to the program. The buffer's text will be passed to the program on stdin, and the formatted output should be written to stdout. For example, the following command would strip trailing spaces using sed(1):{
"formatter": {
"external": {
"command": "sed",
"arguments": ["-e", "s/ *$//"]
}
}
}
{buffer_path} placeholder which at runtime will include the path of the buffer being formatted. Formatters operate by receiving file content via standard input, reformatting it and then outputting it to standard output and so normally don't know the filename of what they are formatting. Tools like Prettier support receiving the file path via a command line argument which can then used to impact formatting decisions.WARNING: {buffer_path} should not be used to direct your formatter to read from a filename. Your formatter should only read from standard input and should not read or write files directly.
"formatter": {
"external": {
"command": "prettier",
"arguments": ["--stdin-filepath", "{buffer_path}"]
}
}
"code_actions":{
"formatter": [
// Use ESLint's --fix:
{ "code_action": "source.fixAll.eslint" },
// Organize imports on save:
{ "code_action": "source.organizeImports" }
]
}
{
"formatter": [
{ "language_server": { "name": "rust-analyzer" } },
{
"external": {
"command": "sed",
"arguments": ["-e", "s/ *$//"]
}
}
]
}
Here rust-analyzer will be used first to format the code, followed by a call of sed.
If any of the formatters fails, the subsequent ones will still be executed.
"none". This setting disables the configured formatter, but any actions in code_actions_on_format will still be executed:{
"formatter": "none"
}
use_autoclosetrueOptions
boolean values
always_treat_brackets_as_autoclosedfalseOptions
boolean values
Example
If the setting is set to true:
)))^))))))The result is still ))) and not )))))), which is what it would be by default.
file_scan_exclusionsfile_scan_inclusions.{
"file_scan_exclusions": [
"**/.git",
"**/.svn",
"**/.hg",
"**/.jj",
"**/CVS",
"**/.DS_Store",
"**/Thumbs.db",
"**/.classpath",
"**/.settings"
]
}
Note, specifying file_scan_exclusions in settings.json will override the defaults (shown above). If you are looking to exclude additional items you will need to include all the default values in your settings.
file_scan_inclusionsfile_scan_exclusions takes precedence over these inclusions.{
"file_scan_inclusions": [".env*"]
}
file_types{
"file_types": {
"JSONC": [
"**/.zed/**/*.json",
"**/zed/**/*.json",
"**/Zed/**/*.json",
"**/.vscode/**/*.json"
],
"Shell Script": [".env.*"]
}
}
Examples
To interpret all .c files as C++, files called MyLockFile as TOML and files starting with Dockerfile as Dockerfile:
{
"file_types": {
"C++": ["c"],
"TOML": ["MyLockFile"],
"Dockerfile": ["Dockerfile*"]
}
}
diagnostics{
"diagnostics": {
"include_warnings": true,
"inline": {
"enabled": false
}
}
}
inline{
"diagnostics": {
"inline": {
"enabled": false,
"update_debounce_ms": 150,
"padding": 4,
"min_column": 0,
"max_severity": null
}
}
}
Options
{
"diagnostics": {
"inline": {
"enabled": true
}
}
}
{
"diagnostics": {
"inline": {
"enabled": true,
"update_debounce_ms": 150
}
}
}
{
"diagnostics": {
"inline": {
"enabled": true,
"padding": 4
}
}
}
{
"diagnostics": {
"inline": {
"enabled": true,
"min_column": 80
}
}
}
{
"diagnostics": {
"inline": {
"enabled": true,
"max_severity": "warning"
}
}
}
git{
"git": {
"git_gutter": "tracked_files",
"inline_blame": {
"enabled": true
},
"branch_picker": {
"show_author_name": true
},
"hunk_style": "staged_hollow"
}
}
git_guttertracked_filesOptions
{
"git": {
"git_gutter": "tracked_files"
}
}
{
"git": {
"git_gutter": "hide"
}
}
gutter_debouncenullOptions
integer values representing milliseconds
Example:
{
"git": {
"gutter_debounce": 100
}
}
inline_blame{
"git": {
"inline_blame": {
"enabled": true
}
}
}
Options
{
"git": {
"inline_blame": {
"enabled": false
}
}
}
{
"git": {
"inline_blame": {
"delay_ms": 500
}
}
}
{
"git": {
"inline_blame": {
"show_commit_summary": true
}
}
}
{
"git": {
"inline_blame": {
"min_column": 80
}
}
}
{
"git": {
"inline_blame": {
"padding": 10
}
}
}
branch_picker{
"git": {
"branch_picker": {
"show_author_name": false
}
}
}
Options
{
"git": {
"branch_picker": {
"show_author_name": true
}
}
}
hunk_style{
"git": {
"hunk_style": "staged_hollow"
}
}
Options
{
"git": {
"hunk_style": "staged_hollow"
}
}
{
"git": {
"hunk_style": "unstaged_hollow"
}
}
go_to_definition_fallback"find_all_references"Options
{
"go_to_definition_fallback": "none"
}
{
"go_to_definition_fallback": "find_all_references"
}
hard_tabsfalseOptions
boolean values
helix_mode also enables vim_mode. See the Helix documentation for more details.helix_modefalseOptions
boolean values
indent_guides{
"indent_guides": {
"enabled": true,
"line_width": 1,
"active_line_width": 1,
"coloring": "fixed",
"background_coloring": "disabled"
}
}
Options
{
"indent_guides": {
"enabled": false
}
}
{
"languages": {
"Python": {
"indent_guides": {
"enabled": true
}
}
}
}
accents). They can be customized by using theme overrides.{
"indent_guides": {
"enabled": true,
"coloring": "indent_aware"
}
}
accents). They can be customized by using theme overrides.{
"indent_guides": {
"enabled": true,
"coloring": "indent_aware",
"background_coloring": "indent_aware"
}
}
hover_popover_enabledtrueOptions
boolean values
auto_signature_help is enabled.hover_popover_delay300Options
integer values representing milliseconds
mode, dark, and light icon themes for files/folders inside Zed.icon_themeZed (Default)mode, dark, and light.icon_theme{
"icon_theme": {
"mode": "system",
"dark": "Zed (Default)",
"light": "Zed (Default)"
}
}
modesystemOptions
{
"icon_theme": {
"mode": "dark",
"dark": "Zed (Default)",
"light": "Zed (Default)"
}
}
{
"icon_theme": {
"mode": "light",
"dark": "Zed (Default)",
"light": "Zed (Default)"
}
}
{
"icon_theme": {
"mode": "system",
"dark": "Zed (Default)",
"light": "Zed (Default)"
}
}
darkZed (Default)Options
Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
lightZed (Default)Options
Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
image_viewer{
"image_viewer": {
"unit": "binary"
}
}
Options
unit"binary"Options
{
"image_viewer": {
"unit": "binary"
}
}
{
"image_viewer": {
"unit": "decimal"
}
}
inlay_hints{
"inlay_hints": {
"enabled": false,
"show_type_hints": true,
"show_parameter_hints": true,
"show_other_hints": true,
"show_background": false,
"edit_debounce_ms": 700,
"scroll_debounce_ms": 50,
"toggle_on_modifiers_press": null
}
}
Options
Inlay hints querying consists of two parts: editor (client) and LSP server. With the inlay settings above are changed to enable the hints, editor will start to query certain types of hints and react on LSP hint refresh request from the server. At this point, the server may or may not return hints depending on its implementation, further configuration might be needed, refer to the corresponding LSP server documentation.
The following languages have inlay hints preconfigured by Zed:
Use the lsp section for the server configuration. Examples are provided in the corresponding language documentation.
Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled. Settings-related hint updates are not debounced.
All possible config values for toggle_on_modifiers_press are:
{
"inlay_hints": {
"toggle_on_modifiers_press": {
"control": true,
"shift": true,
"alt": true,
"platform": true,
"function": true
}
}
}
Unspecified values have a false value, hints won't be toggled if all the modifiers are false or not all the modifiers are pressed.
journal{
"journal": {
"path": "~",
"hour_format": "hour12"
}
}
~ (the home directory).path~Options
string values
hour_formathour12Options
{
"journal": {
"hour_format": "hour12"
}
}
{
"journal": {
"hour_format": "hour24"
}
}
jsx_tag_auto_close{
"jsx_tag_auto_close": {
"enabled": true
}
}
Options
enabled: Whether to enable automatic JSX tag closinglanguagesnullOptions
To override settings for a language, add an entry for that languages name to the languages value. Example:
{
"languages": {
"C": {
"format_on_save": "off",
"preferred_line_length": 64,
"soft_wrap": "preferred_line_length"
},
"JSON": {
"tab_size": 4
}
}
}
The following settings can be overridden for each specific language:
enable_language_serverensure_final_newline_on_saveformat_on_saveformatterhard_tabspreferred_line_lengthremove_trailing_whitespace_on_savesemantic_tokensshow_edit_predictionsshow_whitespaceswhitespace_mapsoft_wraptab_sizeuse_autoclosealways_treat_brackets_as_autoclosedThese values take in the same options as the root-level settings with the same name.
document_symbolsoffOptions
"off": Use tree-sitter queries to compute document symbols (default)"on": Use the language server's textDocument/documentSymbol LSP response. When enabled, tree-sitter is not used for document symbolsLSP document symbols can provide more accurate symbols for complex language features (e.g., generic types, macros, decorators) that tree-sitter may not handle well. Use this when your language server provides better symbol information than the tree-sitter grammar.
Example:
{
"languages": {
"TypeScript": {
"document_symbols": "on"
}
}
}
language_models{
"language_models": {
"anthropic": {
"api_url": "https://api.anthropic.com"
},
"google": {
"api_url": "https://generativelanguage.googleapis.com"
},
"ollama": {
"api_url": "http://localhost:11434"
},
"openai": {
"api_url": "https://api.openai.com/v1"
}
}
}
Options
Configuration for various AI model providers including API URLs and authentication settings.
line_indicator_format"short"Options
{
"line_indicator_format": "short"
}
{
"line_indicator_format": "long"
}
<html> tag, the contents of the closing </html> tag will be edited as well.linked_editstrueOptions
boolean values
textDocument/documentColor colors in the editorlsp_document_colorsinlayOptions
inlay: Render document colors as inlay hints near the color text.background: Draw a background behind the color text.border: Draw a border around the color text.none: Do not query and render document colors.max_tabsnullOptions
Positive integer values or null for unlimited tabs
middle_click_pastetrueOptions
boolean values
multi_cursor_modifieraltOptions
Alt on Linux and Windows and to Option on macOS:{
"multi_cursor_modifier": "alt"
}
Control on Linux and Windows and to Command on macOS:{
"multi_cursor_modifier": "cmd_or_ctrl" // alias: "cmd", "ctrl"
}
node{
"node": {
"ignore_system_version": false,
"path": null,
"npm_path": null
}
}
Options
ignore_system_version: Whether to ignore the system Node.js versionpath: Custom path to Node.js binarynpm_path: Custom path to npm binaryproxynullOptions
The proxy setting must contain a URL to the proxy.
The following URI schemes are supported:
httphttpssocks4 - SOCKS4 proxy with local DNSsocks4a - SOCKS4 proxy with remote DNSsocks5 - SOCKS5 proxy with local DNSsocks5h - SOCKS5 proxy with remote DNShttp will be used when no scheme is specified.
By default no proxy will be used, or Zed will attempt to retrieve proxy settings from environment variables, such as http_proxy, HTTP_PROXY, https_proxy, HTTPS_PROXY, all_proxy, ALL_PROXY, no_proxy and NO_PROXY.
For example, to set an http proxy, add the following to your settings:
{
"proxy": "http://127.0.0.1:10809"
}
Or to set a socks5 proxy:
{
"proxy": "socks5h://localhost:10808"
}
If you wish to exclude certain hosts from using the proxy, set the NO_PROXY environment variable. This accepts a comma-separated list of hostnames, host suffixes, IPv4/IPv6 addresses or blocks that should not use the proxy. For example if your environment included NO_PROXY="google.com, 192.168.1.0/24" all hosts in 192.168.1.*, google.com and *.google.com would bypass the proxy. See reqwest NoProxy docs for more.
on_last_window_closed"platform_default"Options
{
"on_last_window_closed": "platform_default"
}
{
"on_last_window_closed": "quit_app"
}
profiles{}Options
Configuration object for defining settings profiles. Example:
{
"profiles": {
"presentation": {
"buffer_font_size": 20,
"ui_font_size": 18,
"theme": "One Light"
}
}
}
Description:
Preview tabs allow you to open files in preview mode, where they close automatically when you switch to another file unless you explicitly pin them. This is useful for quickly viewing files without cluttering your workspace. Preview tabs display their file names in italics.
There are several ways to convert a preview tab into a regular tab:
Setting: preview_tabs
Default:
{
"preview_tabs": {
"enabled": true,
"enable_preview_from_project_panel": true,
"enable_preview_from_file_finder": false,
"enable_preview_from_multibuffer": true,
"enable_preview_multibuffer_from_code_navigation": false,
"enable_preview_file_from_code_navigation": true,
"enable_keep_preview_on_code_navigation": false
}
}
enable_preview_from_project_paneltrueOptions
boolean values
enable_preview_from_file_finderfalseOptions
boolean values
enable_preview_from_multibuffertrueOptions
boolean values
enable_preview_multibuffer_from_code_navigationfalseOptions
boolean values
enable_preview_file_from_code_navigationtrueOptions
boolean values
enable_preview_file_from_code_navigation or enable_preview_multibuffer_from_code_navigation is also true, the new tab may replace the existing one.enable_keep_preview_on_code_navigationfalseOptions
boolean values
file_iconstruesmall, medium, large, xlarge, and full.modal_max_widthsmallskip_focus_for_active_in_searchtruepane_split_direction_horizontal"up"Options
{
"pane_split_direction_horizontal": "up"
}
{
"pane_split_direction_horizontal": "down"
}
pane_split_direction_vertical"left"Options
{
"pane_split_direction_vertical": "left"
}
{
"pane_split_direction_vertical": "right"
}
preferred_line_length80Options
integer values
private_files["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/secrets.yml"]Options
List of string glob patterns
projects_online_by_defaulttrueOptions
boolean values
read_ssh_configtrueOptions
boolean values
redact_private_valuesfalseOptions
boolean values
relative_line_numbers"disabled"Options
{
"relative_line_numbers": "enabled"
}
{
"relative_line_numbers": "wrapped"
}
{
"relative_line_numbers": "disabled"
}
remove_trailing_whitespace_on_savetrueOptions
boolean values
resize_all_panels_in_dock["left"]Options
List of strings containing any combination of:
"left": Resize left dock panels together"right": Resize right dock panels together"bottom": Resize bottom dock panels togetherrestore_on_file_reopentrueOptions
boolean values
restore_on_startuplast_sessionOptions
{
"restore_on_startup": "last_session"
}
{
"restore_on_startup": "last_workspace"
}
{
"restore_on_startup": "empty_tab"
}
{
"restore_on_startup": "launchpad"
}
scroll_beyond_last_line"one_page"Options
{
"scroll_beyond_last_line": "one_page"
}
vertical_scroll_margin:{
"scroll_beyond_last_line": "vertical_scroll_margin"
}
{
"scroll_beyond_last_line": "off"
}
Options
boolean values
scroll_sensitivity1.0Options
Positive float values
fast_scroll_sensitivity4.0Options
Positive float values
horizontal_scroll_margin5Options
Non-negative integer values
vertical_scroll_margin3Options
Non-negative integer values
search{
"search": {
"button": true,
"whole_word": false,
"case_sensitive": false,
"include_ignored": false,
"regex": false,
"center_on_match": false
}
}
buttontruewhole_wordfalsecase_sensitivefalseinclude_ignoredfalseregexfalsesearch_on_inputtruecenter_on_matchfalsesearch_wrap is disabled, search result do not wrap around the end of the filesearch_wraptrueseed_search_query_from_cursoralwaysOptions
always always populate the search query with the word under the cursorselection only populate the search query when there is text selectednever never populate the search querysemantic_tokensoffOptions
off: Do not request semantic tokens from language servers.combined: Use LSP semantic tokens together with tree-sitter highlighting.full: Use LSP semantic tokens exclusively, replacing tree-sitter highlighting.To enable semantic tokens globally:
{
"semantic_tokens": "combined"
}
To enable semantic tokens for a specific language:
{
"languages": {
"Rust": {
"semantic_tokens": "full"
}
}
}
May require language server restart to properly apply.
document_folding_rangesoffOptions
off: Use tree-sitter and indent-based folding.on: Use LSP folding wherever possible, falling back to tree-sitter and indent-based folding when no results were returned by the server.To enable LSP folding ranges globally:
{
"document_folding_ranges": "on"
}
To enable LSP folding ranges for a specific language:
{
"languages": {
"Rust": {
"document_folding_ranges": "on"
}
}
}
textDocument/documentSymbol response is used instead.document_symbolsoffOptions
off: Use tree-sitter queries to compute document symbols.on: Use the language server's textDocument/documentSymbol LSP response. When enabled, tree-sitter is not used for document symbols.To enable LSP document symbols globally:
{
"document_symbols": "on"
}
To enable LSP document symbols for a specific language:
{
"languages": {
"Rust": {
"document_symbols": "on"
}
}
}
use_smartcase_searchfalseOptions
boolean values
Examples:
show_call_status_icontrueOptions
boolean values
completions{
"completions": {
"words": "fallback",
"words_min_length": 3,
"lsp": true,
"lsp_fetch_timeout_ms": 0,
"lsp_insert_mode": "replace_suffix"
}
}
wordsfallbackOptions
enabled - Always fetch document's words for completions along with LSP completionsfallback - Only if LSP response errors or times out, use document's words to show completionsdisabled - Never fetch or complete document's words for completions (word-based completions can still be queried via a separate action)words_min_length3Options
Positive integer values
lsptrueOptions
boolean values
lsp_fetch_timeout_ms0Options
integer values representing milliseconds
lsp_insert_modereplace_suffixOptions
insert - Replaces text before the cursor, using the insert range described in the LSP specificationreplace - Replaces text before and after the cursor, using the replace range described in the LSP specificationreplace_subsequence - Behaves like "replace" if the text that would be replaced is a subsequence of the completion text, and like "insert" otherwisereplace_suffix - Behaves like "replace" if the text after the cursor is a suffix of the completion, and like "insert" otherwiseshow_completions_on_inputtrueOptions
boolean values
show_completion_documentationtrueOptions
boolean values
editor::ShowEditPrediction.show_edit_predictionstrueOptions
boolean values
show_whitespacesselectionOptions
allselectionnoneboundarywhitespace_map{
"whitespace_map": {
"space": "•",
"tab": "→"
}
}
soft_wrapnoneOptions
none to avoid wrapping generally, unless the line is too longprefer_line (deprecated, same as none)editor_width to wrap lines that overflow the editor widthpreferred_line_length to wrap lines that overflow preferred_line_length config valuebounded to wrap lines at the minimum of editor_width and preferred_line_lengthshow_wrap_guidestrueOptions
boolean values
use_on_type_formattrueOptions
boolean values
use_auto_surroundtrueOptions
boolean values
use_system_path_promptstrueOptions
boolean values
use_system_promptstrueOptions
boolean values
show_wrap_guides to false.wrap_guidesOptions
List of integer column numbers
tab_size4Options
integer values
tasks{
"tasks": {
"variables": {},
"enabled": true,
"prefer_lsp": false
}
}
Options
variables: Custom variables for task configurationenabled: Whether tasks are enabledprefer_lsp: Whether to prefer LSP-provided tasks over Zed language extension onestelemetry{
"telemetry": {
"diagnostics": true,
"metrics": true
}
}
Options
diagnosticstrueOptions
boolean values
metricstrueOptions
boolean values
terminal{
"terminal": {
"alternate_scroll": "off",
"blinking": "terminal_controlled",
"copy_on_select": false,
"keep_selection_on_copy": true,
"dock": "bottom",
"default_width": 640,
"default_height": 320,
"detect_venv": {
"on": {
"directories": [".env", "env", ".venv", "venv"],
"activate_script": "default"
}
},
"env": {},
"font_family": null,
"font_features": null,
"font_size": null,
"line_height": "comfortable",
"minimum_contrast": 45,
"option_as_meta": false,
"button": true,
"shell": "system",
"scroll_multiplier": 3.0,
"toolbar": {
"breadcrumbs": false
},
"working_directory": "current_project_directory",
"scrollbar": {
"show": null
}
}
}
dockbottomOptions
"bottom", "left" or "right"
?1007) is active by default. Alternate Scroll mode converts mouse scroll events into up / down key presses when in the alternate screen (e.g. when running applications like vim or less). The terminal can still set and unset this mode with ANSI escape codes.alternate_scrolloffOptions
{
"terminal": {
"alternate_scroll": "off"
}
}
{
"terminal": {
"alternate_scroll": "on"
}
}
blinkingterminal_controlledOptions
{
"terminal": {
"blinking": "off"
}
}
{
"terminal": {
"blinking": "terminal_controlled"
}
}
{
"terminal": {
"blinking": "on"
}
}
copy_on_selectfalseOptions
boolean values
Example
{
"terminal": {
"copy_on_select": true
}
}
cursor_shapenull (defaults to block)Options
{
"terminal": {
"cursor_shape": "block"
}
}
{
"terminal": {
"cursor_shape": "bar"
}
}
{
"terminal": {
"cursor_shape": "underline"
}
}
{
"terminal": {
"cursor_shape": "hollow"
}
}
keep_selection_on_copytrueOptions
boolean values
Example
{
"terminal": {
"keep_selection_on_copy": false
}
}
: to separate multiple values in a single variableenv{}Example
{
"terminal": {
"env": {
"ZED": "1",
"KEY": "value1:value2"
}
}
}
font_sizenullOptions
integer values
{
"terminal": {
"font_size": 15
}
}
font_familynullOptions
The name of any font family installed on the user's system
{
"terminal": {
"font_family": "Berkeley Mono"
}
}
font_featuresnullOptions
See Buffer Font Features
{
"terminal": {
"font_features": {
"calt": false
// See Buffer Font Features for more features
}
}
}
line_heightstandardOptions
comfortable for reading, 1.618.{
"terminal": {
"line_height": "comfortable"
}
}
standard line height, 1.3. This option is useful for TUIs, particularly if they use box characters. (default){
"terminal": {
"line_height": "standard"
}
}
{
"terminal": {
"line_height": {
"custom": 2
}
}
}
minimum_contrast45Options
integer values from 0 to 106. Common recommended values:
0: No contrast adjustment45: Minimum for large fluent text (default)60: Minimum for other content text75: Minimum for body text90: Preferred for body text{
"terminal": {
"minimum_contrast": 45
}
}
option_as_metafalseOptions
boolean values
{
"terminal": {
"option_as_meta": true
}
}
shellsystemOptions
/etc/passwd file).{
"terminal": {
"shell": "system"
}
}
{
"terminal": {
"shell": {
"program": "sh"
}
}
}
{
"terminal": {
"shell": {
"with_arguments": {
"program": "/bin/bash",
"args": ["--login"]
}
}
}
}
detect_venv{
"terminal": {
"detect_venv": {
"on": {
// Default directories to search for virtual environments, relative
// to the current working directory. We recommend overriding this
// in your project's settings, rather than globally.
"directories": [".env", "env", ".venv", "venv"],
// Can also be `csh`, `fish`, and `nushell`
"activate_script": "default"
}
}
}
}
Disable with:
{
"terminal": {
"detect_venv": "off"
}
}
scroll_multiplier1.0Options
Positive floating point values. Values less than or equal to 0 will be clamped to a minimum of 0.01.
Example
{
"terminal": {
"scroll_multiplier": 5.0
}
}
toolbar{
"terminal": {
"toolbar": {
"breadcrumbs": false
}
}
}
Options
At the moment, only the breadcrumbs option is available, it controls displaying of the terminal title that can be changed via PROMPT_COMMAND.
If the terminal title is empty, the breadcrumbs won't be shown.
The shell running in the terminal needs to be configured to emit the title.
Example command to set the title: echo -e "\e]2;New Title\007";
buttontrueOptions
boolean values
{
"terminal": {
"button": false
}
}
working_directory"current_project_directory"Options
{
"terminal": {
"working_directory": "current_file_directory"
}
}
{
"terminal": {
"working_directory": "current_project_directory"
}
}
{
"terminal": {
"working_directory": "first_project_directory"
}
}
{
"terminal": {
"working_directory": "always_home"
}
}
{
"terminal": {
"working_directory": {
"always": {
"directory": "~/zed/projects/"
}
}
}
}
path_hyperlink_regexes{
"terminal": {
"path_hyperlink_regexes": [
// Python-style diagnostics
"File \"(?<path>[^\"]+)\", line (?<line>[0-9]+)",
// Common path syntax with optional line, column, description, trailing punctuation, or
// surrounding symbols or quotes
[
"(?x)",
"# optionally starts with 0-2 opening prefix symbols",
"[({\\[<]{0,2}",
"# which may be followed by an opening quote",
"(?<quote>[\"'`])?",
"# `path` is the shortest sequence of any non-space character",
"(?<link>(?<path>[^ ]+?",
" # which may end with a line and optionally a column,",
" (?<line_column>:+[0-9]+(:[0-9]+)?|:?\\([0-9]+([,:][0-9]+)?\\))?",
"))",
"# which must be followed by a matching quote",
"(?(<quote>)\\k<quote>)",
"# and optionally a single closing symbol",
"[)}\\]>]?",
"# if line/column matched, may be followed by a description",
"(?(<line_column>):[^ 0-9][^ ]*)?",
"# which may be followed by trailing punctuation",
"[.,:)}\\]>]*",
"# and always includes trailing whitespace or end of line",
"([ ]+|$)"
]
]
}
}
path_hyperlink_timeout_ms1repl{
"repl": {
// Maximum number of columns to keep in REPL's scrollback buffer.
// Clamped with [20, 512] range.
"max_columns": 128,
// Maximum number of lines to keep in REPL's scrollback buffer.
// Clamped with [4, 256] range.
"max_lines": 32
}
}
mode, dark, and light themes for the Zed UI.themeOne Darkmode, dark, and light themes.theme{
"theme": {
"mode": "system",
"dark": "One Dark",
"light": "One Light"
}
}
modesystemOptions
{
"theme": {
"mode": "dark",
"dark": "One Dark",
"light": "One Light"
}
}
{
"theme": {
"mode": "light",
"dark": "One Dark",
"light": "One Light"
}
}
{
"theme": {
"mode": "system",
"dark": "One Dark",
"light": "One Light"
}
}
darkOne DarkOptions
Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
lightOne LightOptions
Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
title_bar{
"title_bar": {
"show_branch_icon": false,
"show_branch_name": true,
"show_project_items": true,
"show_onboarding_banner": true,
"show_user_picture": true,
"show_user_menu": true,
"show_sign_in": true,
"show_menus": false
}
}
Options
show_branch_icon: Whether to show the branch icon beside branch switcher in the titlebarshow_branch_name: Whether to show the branch name button in the titlebarshow_project_items: Whether to show the project host and name in the titlebarshow_onboarding_banner: Whether to show onboarding banners in the titlebarshow_user_picture: Whether to show user picture in the titlebarshow_user_menu: Whether to show the user menu button in the titlebar (the one that displays your avatar by default and contains options like Settings, Keymap, Themes, etc.)show_sign_in: Whether to show the sign in button in the titlebarshow_menus: Whether to show the menus in the titlebarvim_modefalsewhen_closing_with_no_tabs"platform_default"Options
{
"when_closing_with_no_tabs": "platform_default"
}
{
"when_closing_with_no_tabs": "close_window"
}
{
"when_closing_with_no_tabs": "keep_window_open"
}
project_panel{
"project_panel": {
"button": true,
"default_width": 240,
"dock": "left",
"entry_spacing": "comfortable",
"file_icons": true,
"folder_icons": true,
"git_status": true,
"indent_size": 20,
"auto_reveal_entries": true,
"auto_fold_dirs": true,
"bold_folder_labels": false,
"drag_and_drop": true,
"scrollbar": {
"show": null,
"horizontal_scroll": true
},
"sticky_scroll": true,
"show_diagnostics": "all",
"indent_guides": {
"show": "always"
},
"sort_mode": "directories_first",
"hide_root": false,
"hide_hidden": false,
"starts_open": true,
"auto_open": {
"on_create": true,
"on_paste": true,
"on_drop": true
}
}
}
dockleftOptions
{
"project_panel": {
"dock": "left"
}
}
{
"project_panel": {
"dock": "right"
}
}
entry_spacingcomfortableOptions
{
"project_panel": {
"entry_spacing": "comfortable"
}
}
{
"project_panel": {
"entry_spacing": "standard"
}
}
git_statustrueOptions
{
"project_panel": {
"git_status": true
}
}
{
"project_panel": {
"git_status": false
}
}
default_width240Options
float values
auto_reveal_entriestrueOptions
{
"project_panel": {
"auto_reveal_entries": true
}
}
{
"project_panel": {
"auto_reveal_entries": false
}
}
auto_fold_dirstrueOptions
{
"project_panel": {
"auto_fold_dirs": true
}
}
{
"project_panel": {
"auto_fold_dirs": false
}
}
bold_folder_labelsfalseOptions
{
"project_panel": {
"bold_folder_labels": true
}
}
{
"project_panel": {
"bold_folder_labels": false
}
}
indent_size20indent_guides{
"project_panel": {
"indent_guides": {
"show": "always"
}
}
}
Options
{
"project_panel": {
"indent_guides": {
"show": "always"
}
}
}
{
"project_panel": {
"indent_guides": {
"show": "never"
}
}
}
scrollbar{
"project_panel": {
"scrollbar": {
"show": null,
"horizontal_scroll": true
}
}
}
Options
show: Whether to show a scrollbar in the project panel. Possible values: null, "auto", "system", "always", "never". Inherits editor settings when absent, see its description for more details.horizontal_scroll: Whether to allow horizontal scrolling in the project panel. When false, the view is locked to the leftmost position and long file names are clipped.sort_modedirectories_firstOptions
{
"project_panel": {
"sort_mode": "directories_first"
}
}
{
"project_panel": {
"sort_mode": "mixed"
}
}
{
"project_panel": {
"sort_mode": "files_first"
}
}
auto_open{
"project_panel": {
"auto_open": {
"on_create": true,
"on_paste": true,
"on_drop": true
}
}
}
Options
on_create: Whether to automatically open newly created files in the editor.on_paste: Whether to automatically open files after pasting or duplicating them.on_drop: Whether to automatically open files dropped from external sources.Visit the Configuration page under the AI section to learn more about all the agent-related settings.
collaboration_panel{
"collaboration_panel": {
"button": true,
"dock": "left",
"default_width": 240
}
}
Options
button: Whether to show the collaboration panel button in the status bardock: Where to dock the collaboration panel. Can be left or rightdefault_width: Default width of the collaboration paneldebugger{
"debugger": {
"stepping_granularity": "line",
"save_breakpoints": true,
"dock": "bottom",
"button": true
}
}
See the debugger page for more information about debugging support within Zed.
git_panel{
"git_panel": {
"button": true,
"dock": "left",
"default_width": 360,
"status_style": "icon",
"fallback_branch_name": "main",
"sort_by_path": false,
"collapse_untracked_diff": false,
"scrollbar": {
"show": null
},
"starts_open": false
}
}
Options
button: Whether to show the git panel button in the status bardock: Where to dock the git panel. Can be left or rightdefault_width: Default width of the git panelstatus_style: How to display git status. Can be label_color or iconfallback_branch_name: What branch name to use if init.defaultBranch is not setsort_by_path: Whether to sort entries in the panel by path or by status (the default)collapse_untracked_diff: Whether to collapse untracked files in the diff panelscrollbar: When to show the scrollbar in the git panelstarts_open: Whether the git panel should open on startupgit.worktree_directory"../worktrees"When the resolved directory falls outside the project root, the project's directory name is automatically appended so that sibling repos don't collide. For example, with the default "../worktrees" and a project at ~/code/zed, worktrees are created under ~/code/worktrees/zed/.
When the resolved directory is inside the project root, no extra component is added (it's already project-scoped).
Examples:
"../worktrees" — ~/code/worktrees/<project>/ (default)".git/zed-worktrees" — <project>/.git/zed-worktrees/"my-worktrees" — <project>/my-worktrees/Trailing slashes are ignored.
{
"git": {
"worktree_directory": "../worktrees"
}
}
git_hosting_providers[]Options
Each entry accepts:
provider: One of github, gitlab, or bitbucketname: Display name for the instancebase_url: Base URL, e.g. https://git.example.corpYou can define these in user or project settings; project settings are merged on top of user settings.
{
"git_hosting_providers": [
{
"provider": "github",
"name": "BigCorp GitHub",
"base_url": "https://git.example.corp"
}
]
}
outline_panel{
"outline_panel": {
"button": true,
"default_width": 300,
"dock": "left",
"file_icons": true,
"folder_icons": true,
"git_status": true,
"indent_size": 20,
"auto_reveal_entries": true,
"auto_fold_dirs": true,
"indent_guides": {
"show": "always"
},
"scrollbar": {
"show": null
}
}
}
calls{
"calls": {
// Join calls with the microphone live by default
"mute_on_join": false,
// Share your project when you are the first to join a channel
"share_on_join": false
}
}
colorize_bracketsfalseOptions
boolean values
The colors that are used for different indentation levels are defined in the theme (theme key: accents). They can be customized by using theme overrides.
unnecessary_code_fade0.3Options
Float values between 0.0 and 0.9, where:
0.0 means no fading (unused code looks the same as used code)0.9 means maximum fading (unused code is very faint but still visible)Example
{
"unnecessary_code_fade": 0.5
}
ui_font_family.ZedSans. This currently aliases to IBM Plex.Options
The name of any font family installed on the system, ".ZedSans" to use the Zed-provided default, or ".SystemUIFont" to use the system's default UI font (on macOS and Windows).
ui_font_features{
"ui_font_features": {
"calt": false
}
}
Options
Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
For example, to disable font ligatures, add the following to your settings:
{
"ui_font_features": {
"calt": false
}
}
You can also set other OpenType features, like setting cv01 to 7:
{
"ui_font_features": {
"cv01": 7
}
}
ui_font_fallbacksnullOptions
For example, to use Nerd Font as a fallback, add the following to your settings:
{
"ui_font_fallbacks": ["Nerd Font"]
}
ui_font_size16Options
integer values from 6 to 100 pixels (inclusive)
ui_font_weight400Options
integer values between 100 and 900
settings profile selector: toggle.profiles{}In your settings.json file, add the profiles object.
Each key within this object is the name of a settings profile, and each value is an object that can include any of Zed's settings.
Example:
{
"profiles": {
"Presenting (Dark)": {
"agent_buffer_font_size": 18.0,
"buffer_font_size": 18.0,
"theme": "One Dark",
"ui_font_size": 18.0
},
"Presenting (Light)": {
"agent_buffer_font_size": 18.0,
"buffer_font_size": 18.0,
"theme": "One Light",
"ui_font_size": 18.0
},
"Writing": {
"agent_buffer_font_size": 15.0,
"buffer_font_size": 15.0,
"theme": "Catppuccin Frappé - No Italics",
"ui_font_size": 15.0,
"tab_bar": { "show": false },
"toolbar": { "breadcrumbs": false }
}
}
}
To preview and enable a settings profile, open the command palette via {#kb command_palette::Toggle} and search for settings profile selector: toggle.
// ~/.config/zed/settings.json
{
"theme": "cave-light",
"tab_size": 2,
"preferred_line_length": 80,
"soft_wrap": "none",
"buffer_font_size": 18,
"buffer_font_family": ".ZedMono",
"autosave": "on_focus_change",
"format_on_save": "off",
"vim_mode": false,
"terminal": {
"font_family": "FiraCode Nerd Font Mono",
"blinking": "off"
},
"languages": {
"C": {
"format_on_save": "on",
"formatter": "language_server",
"preferred_line_length": 64,
"soft_wrap": "preferred_line_length"
}
}
}