configuring-zed.md

   1# Configuring Zed
   2
   3Zed is designed to be configured: we want to fit your workflow and preferences exactly. We provide default settings that are designed to be a comfortable starting point for as many people as possible, but we hope you will enjoy tweaking it to make it feel incredible.
   4
   5In addition to the settings described here, you may also want to change your [theme](./themes.md), configure your [key bindings](./key-bindings.md), set up [tasks](./tasks.md) or install [extensions](https://github.com/zed-industries/extensions).
   6
   7## Settings Editor
   8
   9You can browse through many of the supported settings via the Settings Editor, which can be opened with the {#kb zed::OpenSettings} keybinding, or through the `zed: open settings` action in the command palette. Through it, you can customize your local, user settings as well as project settings.
  10
  11> Note that not all settings that Zed supports are available through the Settings Editor yet.
  12> Some more intricate ones, such as language formatters, can only be changed through the JSON settings file {#kb zed::OpenSettingsFile}.
  13
  14## User Settings File
  15
  16<!--
  17TBD: Settings files. Rewrite with "remote settings" in mind (e.g. `local settings` on the remote host).
  18Consider renaming `zed: Open Local Settings` to `zed: Open Project Settings`.
  19
  20TBD: Add settings documentation about how settings are merged as overlays. E.g. project>local>default. Note how settings that are maps are merged, but settings that are arrays are replaced and must include the defaults.
  21-->
  22
  23Your settings JSON file can be opened with {#kb zed::OpenSettingsFile}.
  24By default it is located at `~/.config/zed/settings.json`, though if you have `XDG_CONFIG_HOME` in your environment on Linux it will be at `$XDG_CONFIG_HOME/zed/settings.json` instead.
  25
  26Whatever you have added to your user settings file gets merged with any local configuration inside your projects.
  27
  28### Default Settings
  29
  30In the Settings Editor, the values you see set are the default ones.
  31You can also verify them in JSON by running {#action zed::OpenDefaultSettings} from the command palette.
  32
  33Extensions that provide language servers may also provide default settings for those language servers.
  34
  35## Project Settings File
  36
  37Similarly to user files, you can open your project settings file by running {#action zed::OpenProjectSettings} from the command palette.
  38This will create a `.zed` directory containing`.zed/settings.json`.
  39
  40Although most projects will only need one settings file at the root, you can add more local settings files for subdirectories as needed.
  41Not all settings can be set in local files, just those that impact the behavior of the editor and language tooling.
  42For example you can set `tab_size`, `formatter` etc. but not `theme`, `vim_mode` and similar.
  43
  44The syntax for configuration files is a super-set of JSON that allows `//` comments.
  45
  46## Per-release Channel Overrides
  47
  48Zed reads the same `settings.json` across all release channels (Stable, Preview or Nightly).
  49However, you can scope overrides to a specific channel by adding top-level `stable`, `preview`, `nightly` or `dev` objects.
  50They are merged into the base configuration with settings from these keys taking precedence upon launching the specified build. For example:
  51
  52```json [settings]
  53{
  54  "theme": "sunset",
  55  "vim_mode": false,
  56  "nightly": {
  57    "theme": "cave-light",
  58    "vim_mode": true
  59  },
  60  "preview": {
  61    "theme": "zed-dark"
  62  }
  63}
  64```
  65
  66With this configuration, Stable keeps all base preferences, Preview switches to `zed-dark`, and Nightly enables Vim mode with a different theme.
  67
  68Changing settings in the Settings Editorwill always apply the change across all channels.
  69
  70# Settings
  71
  72Find below an extensive run-through of many supported settings by Zed.
  73
  74## Active Pane Modifiers
  75
  76- Description: Styling settings applied to the active pane.
  77- Setting: `active_pane_modifiers`
  78- Default:
  79
  80```json [settings]
  81{
  82  "active_pane_modifiers": {
  83    "border_size": 0.0,
  84    "inactive_opacity": 1.0
  85  }
  86}
  87```
  88
  89### Border size
  90
  91- Description: Size of the border surrounding the active pane. When set to 0, the active pane doesn't have any border. The border is drawn inset.
  92- Setting: `border_size`
  93- Default: `0.0`
  94
  95**Options**
  96
  97Non-negative `float` values
  98
  99### Inactive Opacity
 100
 101- Description: Opacity of inactive panels. When set to 1.0, the inactive panes have the same opacity as the active one. If set to 0, the inactive panes content will not be visible at all. Values are clamped to the [0.0, 1.0] range.
 102- Setting: `inactive_opacity`
 103- Default: `1.0`
 104
 105**Options**
 106
 107`float` values
 108
 109## Bottom Dock Layout
 110
 111- Description: Control the layout of the bottom dock, relative to the left and right docks.
 112- Setting: `bottom_dock_layout`
 113- Default: `"contained"`
 114
 115**Options**
 116
 1171. Contain the bottom dock, giving the full height of the window to the left and right docks.
 118
 119```json [settings]
 120{
 121  "bottom_dock_layout": "contained"
 122}
 123```
 124
 1252. Give the bottom dock the full width of the window, truncating the left and right docks.
 126
 127```json [settings]
 128{
 129  "bottom_dock_layout": "full"
 130}
 131```
 132
 1333. Left align the bottom dock, truncating the left dock and giving the right dock the full height of the window.
 134
 135```json [settings]
 136{
 137  "bottom_dock_layout": "left_aligned"
 138}
 139```
 140
 1414. Right align the bottom dock, giving the left dock the full height of the window and truncating the right dock.
 142
 143```json [settings]
 144{
 145  "bottom_dock_layout": "right_aligned"
 146}
 147```
 148
 149## Agent Font Size
 150
 151- Description: The font size for text in the agent panel. Inherits the UI font size if unset.
 152- Setting: `agent_font_size`
 153- Default: `null`
 154
 155**Options**
 156
 157`integer` values from `6` to `100` pixels (inclusive)
 158
 159## Allow Rewrap
 160
 161- Description: Controls where the {#action editor::Rewrap} action is allowed in the current language scope
 162- Setting: `allow_rewrap`
 163- Default: `"in_comments"`
 164
 165**Options**
 166
 1671. Allow rewrap in comments only:
 168
 169```json [settings]
 170{
 171  "allow_rewrap": "in_comments"
 172}
 173```
 174
 1752. Allow rewrap in selections only:
 176
 177```json [settings]
 178{
 179  "allow_rewrap": "in_selections"
 180}
 181```
 182
 1833. Allow rewrap anywhere:
 184
 185```json [settings]
 186{
 187  "allow_rewrap": "anywhere"
 188}
 189```
 190
 191Note: This setting has no effect in Vim mode, as rewrap is already allowed everywhere.
 192
 193## Auto Indent
 194
 195- Description: Whether indentation should be adjusted based on the context whilst typing. This can be specified on a per-language basis.
 196- Setting: `auto_indent`
 197- Default: `true`
 198
 199**Options**
 200
 201`boolean` values
 202
 203## Auto Indent On Paste
 204
 205- Description: Whether indentation of pasted content should be adjusted based on the context
 206- Setting: `auto_indent_on_paste`
 207- Default: `true`
 208
 209**Options**
 210
 211`boolean` values
 212
 213## Auto Install extensions
 214
 215- Description: Define extensions to be autoinstalled or never be installed.
 216- Setting: `auto_install_extensions`
 217- Default: `{ "html": true }`
 218
 219**Options**
 220
 221You can find the names of your currently installed extensions by listing the subfolders under the [extension installation location](./extensions/installing-extensions.md#installation-location):
 222
 223On macOS:
 224
 225```sh
 226ls ~/Library/Application\ Support/Zed/extensions/installed/
 227```
 228
 229On Linux:
 230
 231```sh
 232ls ~/.local/share/zed/extensions/installed
 233```
 234
 235Define extensions which should be installed (`true`) or never installed (`false`).
 236
 237```json [settings]
 238{
 239  "auto_install_extensions": {
 240    "html": true,
 241    "dockerfile": true,
 242    "docker-compose": false
 243  }
 244}
 245```
 246
 247## Autosave
 248
 249- Description: When to automatically save edited buffers.
 250- Setting: `autosave`
 251- Default: `off`
 252
 253**Options**
 254
 2551. To disable autosave, set it to `off`:
 256
 257```json [settings]
 258{
 259  "autosave": "off"
 260}
 261```
 262
 2632. To autosave when focus changes, use `on_focus_change`:
 264
 265```json [settings]
 266{
 267  "autosave": "on_focus_change"
 268}
 269```
 270
 2713. To autosave when the active window changes, use `on_window_change`:
 272
 273```json [settings]
 274{
 275  "autosave": "on_window_change"
 276}
 277```
 278
 2794. To autosave after an inactivity period, use `after_delay`:
 280
 281```json [settings]
 282{
 283  "autosave": {
 284    "after_delay": {
 285      "milliseconds": 1000
 286    }
 287  }
 288}
 289```
 290
 291Note that a save will be triggered when an unsaved tab is closed, even if this is earlier than the configured inactivity period.
 292
 293## Autoscroll on Clicks
 294
 295- Description: Whether to scroll when clicking near the edge of the visible text area.
 296- Setting: `autoscroll_on_clicks`
 297- Default: `false`
 298
 299**Options**
 300
 301`boolean` values
 302
 303## Auto Signature Help
 304
 305- Description: Show method signatures in the editor, when inside parentheses
 306- Setting: `auto_signature_help`
 307- Default: `false`
 308
 309**Options**
 310
 311`boolean` values
 312
 313### Show Signature Help After Edits
 314
 315- Description: Whether to show the signature help after completion or a bracket pair inserted. If `auto_signature_help` is enabled, this setting will be treated as enabled also.
 316- Setting: `show_signature_help_after_edits`
 317- Default: `false`
 318
 319**Options**
 320
 321`boolean` values
 322
 323## Auto Update
 324
 325- Description: Whether or not to automatically check for updates.
 326- Setting: `auto_update`
 327- Default: `true`
 328
 329**Options**
 330
 331`boolean` values
 332
 333## Base Keymap
 334
 335- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
 336- Setting: `base_keymap`
 337- Default: `VSCode`
 338
 339**Options**
 340
 3411. VS Code
 342
 343```json [settings]
 344{
 345  "base_keymap": "VSCode"
 346}
 347```
 348
 3492. Atom
 350
 351```json [settings]
 352{
 353  "base_keymap": "Atom"
 354}
 355```
 356
 3573. JetBrains
 358
 359```json [settings]
 360{
 361  "base_keymap": "JetBrains"
 362}
 363```
 364
 3654. None
 366
 367```json [settings]
 368{
 369  "base_keymap": "None"
 370}
 371```
 372
 3735. Sublime Text
 374
 375```json [settings]
 376{
 377  "base_keymap": "SublimeText"
 378}
 379```
 380
 3816. TextMate
 382
 383```json [settings]
 384{
 385  "base_keymap": "TextMate"
 386}
 387```
 388
 389## Buffer Font Family
 390
 391- Description: The name of a font to use for rendering text in the editor.
 392- Setting: `buffer_font_family`
 393- Default: `.ZedMono`. This currently aliases to [Lilex](https://lilex.myrt.co).
 394
 395**Options**
 396
 397The name of any font family installed on the user's system, or `".ZedMono"`.
 398
 399## Buffer Font Features
 400
 401- Description: The OpenType features to enable for text in the editor.
 402- Setting: `buffer_font_features`
 403- Default: `null`
 404- Platform: macOS and Windows.
 405
 406**Options**
 407
 408Zed 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.
 409
 410For example, to disable font ligatures, add the following to your settings:
 411
 412```json [settings]
 413{
 414  "buffer_font_features": {
 415    "calt": false
 416  }
 417}
 418```
 419
 420You can also set other OpenType features, like setting `cv01` to `7`:
 421
 422```json [settings]
 423{
 424  "buffer_font_features": {
 425    "cv01": 7
 426  }
 427}
 428```
 429
 430## Buffer Font Fallbacks
 431
 432- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
 433- Setting: `buffer_font_fallbacks`
 434- Default: `null`
 435- Platform: macOS and Windows.
 436
 437**Options**
 438
 439For example, to use `Nerd Font` as a fallback, add the following to your settings:
 440
 441```json [settings]
 442{
 443  "buffer_font_fallbacks": ["Nerd Font"]
 444}
 445```
 446
 447## Buffer Font Size
 448
 449- Description: The default font size for text in the editor.
 450- Setting: `buffer_font_size`
 451- Default: `15`
 452
 453**Options**
 454
 455A font size from `6` to `100` pixels (inclusive)
 456
 457## Buffer Font Weight
 458
 459- Description: The default font weight for text in the editor.
 460- Setting: `buffer_font_weight`
 461- Default: `400`
 462
 463**Options**
 464
 465`integer` values between `100` and `900`
 466
 467## Buffer Line Height
 468
 469- Description: The default line height for text in the editor.
 470- Setting: `buffer_line_height`
 471- Default: `"comfortable"`
 472
 473**Options**
 474
 475`"standard"`, `"comfortable"` or `{ "custom": float }` (`1` is compact, `2` is loose)
 476
 477## Centered Layout
 478
 479- Description: Configuration for the centered layout mode.
 480- Setting: `centered_layout`
 481- Default:
 482
 483```json [settings]
 484"centered_layout": {
 485  "left_padding": 0.2,
 486  "right_padding": 0.2,
 487}
 488```
 489
 490**Options**
 491
 492The `left_padding` and `right_padding` options define the relative width of the
 493left 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`.
 494
 495## Close on File Delete
 496
 497- Description: Whether to automatically close editor tabs when their corresponding files are deleted from disk.
 498- Setting: `close_on_file_delete`
 499- Default: `false`
 500
 501**Options**
 502
 503`boolean` values
 504
 505When 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.
 506
 507Note: Dirty files (files with unsaved changes) will not be automatically closed even when this setting is enabled, ensuring you don't lose unsaved work.
 508
 509## Confirm Quit
 510
 511- Description: Whether or not to prompt the user to confirm before closing the application.
 512- Setting: `confirm_quit`
 513- Default: `false`
 514
 515**Options**
 516
 517`boolean` values
 518
 519## Diagnostics Max Severity
 520
 521- Description: Which level to use to filter out diagnostics displayed in the editor
 522- Setting: `diagnostics_max_severity`
 523- Default: `null`
 524
 525**Options**
 526
 5271. Allow all diagnostics (default):
 528
 529```json [settings]
 530{
 531  "diagnostics_max_severity": "all"
 532}
 533```
 534
 5352. Show only errors:
 536
 537```json [settings]
 538{
 539  "diagnostics_max_severity": "error"
 540}
 541```
 542
 5433. Show errors and warnings:
 544
 545```json [settings]
 546{
 547  "diagnostics_max_severity": "warning"
 548}
 549```
 550
 5514. Show errors, warnings, and information:
 552
 553```json [settings]
 554{
 555  "diagnostics_max_severity": "info"
 556}
 557```
 558
 5595. Show all including hints:
 560
 561```json [settings]
 562{
 563  "diagnostics_max_severity": "hint"
 564}
 565```
 566
 567## Disable AI
 568
 569- Description: Whether to disable all AI features in Zed
 570- Setting: `disable_ai`
 571- Default: `false`
 572
 573**Options**
 574
 575`boolean` values
 576
 577## Direnv Integration
 578
 579- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
 580  `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.
 581  It also allows for those environment variables to be used in tasks.
 582- Setting: `load_direnv`
 583- Default: `"direct"`
 584
 585**Options**
 586
 587There are two options to choose from:
 588
 5891. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
 5902. `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.
 591
 592## Double Click In Multibuffer
 593
 594- Description: What to do when multibuffer is double clicked in some of its excerpts (parts of singleton buffers)
 595- Setting: `double_click_in_multibuffer`
 596- Default: `"select"`
 597
 598**Options**
 599
 6001. Behave as a regular buffer and select the whole word (default):
 601
 602```json [settings]
 603{
 604  "double_click_in_multibuffer": "select"
 605}
 606```
 607
 6082. Open the excerpt clicked as a new buffer in the new tab:
 609
 610```json [settings]
 611{
 612  "double_click_in_multibuffer": "open"
 613}
 614```
 615
 616For the case of "open", regular selection behavior can be achieved by holding `alt` when double clicking.
 617
 618## Drop Target Size
 619
 620- Description: Relative size of the drop target in the editor that will open dropped file as a split pane (0-0.5). For example, 0.25 means if you drop onto the top/bottom quarter of the pane a new vertical split will be used, if you drop onto the left/right quarter of the pane a new horizontal split will be used.
 621- Setting: `drop_target_size`
 622- Default: `0.2`
 623
 624**Options**
 625
 626`float` values between `0` and `0.5`
 627
 628## Edit Predictions
 629
 630- Description: Settings for edit predictions.
 631- Setting: `edit_predictions`
 632- Default:
 633
 634```json [settings]
 635  "edit_predictions": {
 636    "disabled_globs": [
 637      "**/.env*",
 638      "**/*.pem",
 639      "**/*.key",
 640      "**/*.cert",
 641      "**/*.crt",
 642      "**/.dev.vars",
 643      "**/secrets.yml"
 644    ]
 645  }
 646```
 647
 648**Options**
 649
 650### Disabled Globs
 651
 652- Description: A list of globs for which edit predictions should be disabled for. This list adds to a pre-existing, sensible default set of globs. Any additional ones you add are combined with them.
 653- Setting: `disabled_globs`
 654- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/.dev.vars", "**/secrets.yml"]`
 655
 656**Options**
 657
 658List of `string` values.
 659
 660## Edit Predictions Disabled in
 661
 662- Description: A list of language scopes in which edit predictions should be disabled.
 663- Setting: `edit_predictions_disabled_in`
 664- Default: `[]`
 665
 666**Options**
 667
 668List of `string` values
 669
 6701. Don't show edit predictions in comments:
 671
 672```json [settings]
 673"disabled_in": ["comment"]
 674```
 675
 6762. Don't show edit predictions in strings and comments:
 677
 678```json [settings]
 679"disabled_in": ["comment", "string"]
 680```
 681
 6823. Only in Go, don't show edit predictions in strings and comments:
 683
 684```json [settings]
 685{
 686  "languages": {
 687    "Go": {
 688      "edit_predictions_disabled_in": ["comment", "string"]
 689    }
 690  }
 691}
 692```
 693
 694## Current Line Highlight
 695
 696- Description: How to highlight the current line in the editor.
 697- Setting: `current_line_highlight`
 698- Default: `all`
 699
 700**Options**
 701
 7021. Don't highlight the current line:
 703
 704```json [settings]
 705"current_line_highlight": "none"
 706```
 707
 7082. Highlight the gutter area:
 709
 710```json [settings]
 711"current_line_highlight": "gutter"
 712```
 713
 7143. Highlight the editor area:
 715
 716```json [settings]
 717"current_line_highlight": "line"
 718```
 719
 7204. Highlight the full line:
 721
 722```json [settings]
 723"current_line_highlight": "all"
 724```
 725
 726## Selection Highlight
 727
 728- Description: Whether to highlight all occurrences of the selected text in an editor.
 729- Setting: `selection_highlight`
 730- Default: `true`
 731
 732## Rounded Selection
 733
 734- Description: Whether the text selection should have rounded corners.
 735- Setting: `rounded_selection`
 736- Default: `true`
 737
 738## Cursor Blink
 739
 740- Description: Whether or not the cursor blinks.
 741- Setting: `cursor_blink`
 742- Default: `true`
 743
 744**Options**
 745
 746`boolean` values
 747
 748## Cursor Shape
 749
 750- Description: Cursor shape for the default editor.
 751- Setting: `cursor_shape`
 752- Default: `bar`
 753
 754**Options**
 755
 7561. A vertical bar:
 757
 758```json [settings]
 759"cursor_shape": "bar"
 760```
 761
 7622. A block that surrounds the following character:
 763
 764```json [settings]
 765"cursor_shape": "block"
 766```
 767
 7683. An underline / underscore that runs along the following character:
 769
 770```json [settings]
 771"cursor_shape": "underline"
 772```
 773
 7744. An box drawn around the following character:
 775
 776```json [settings]
 777"cursor_shape": "hollow"
 778```
 779
 780## Gutter
 781
 782- Description: Settings for the editor gutter
 783- Setting: `gutter`
 784- Default:
 785
 786```json [settings]
 787{
 788  "gutter": {
 789    "line_numbers": true,
 790    "runnables": true,
 791    "breakpoints": true,
 792    "folds": true,
 793    "min_line_number_digits": 4
 794  }
 795}
 796```
 797
 798**Options**
 799
 800- `line_numbers`: Whether to show line numbers in the gutter
 801- `runnables`: Whether to show runnable buttons in the gutter
 802- `breakpoints`: Whether to show breakpoints in the gutter
 803- `folds`: Whether to show fold buttons in the gutter
 804- `min_line_number_digits`: Minimum number of characters to reserve space for in the gutter
 805
 806## Hide Mouse
 807
 808- Description: Determines when the mouse cursor should be hidden in an editor or input box.
 809- Setting: `hide_mouse`
 810- Default: `on_typing_and_movement`
 811
 812**Options**
 813
 8141. Never hide the mouse cursor:
 815
 816```json [settings]
 817"hide_mouse": "never"
 818```
 819
 8202. Hide only when typing:
 821
 822```json [settings]
 823"hide_mouse": "on_typing"
 824```
 825
 8263. Hide on both typing and cursor movement:
 827
 828```json [settings]
 829"hide_mouse": "on_typing_and_movement"
 830```
 831
 832## Snippet Sort Order
 833
 834- Description: Determines how snippets are sorted relative to other completion items.
 835- Setting: `snippet_sort_order`
 836- Default: `inline`
 837
 838**Options**
 839
 8401. Place snippets at the top of the completion list:
 841
 842```json [settings]
 843"snippet_sort_order": "top"
 844```
 845
 8462. Place snippets normally without any preference:
 847
 848```json [settings]
 849"snippet_sort_order": "inline"
 850```
 851
 8523. Place snippets at the bottom of the completion list:
 853
 854```json [settings]
 855"snippet_sort_order": "bottom"
 856```
 857
 8584. Do not show snippets in the completion list at all:
 859
 860```json [settings]
 861"snippet_sort_order": "none"
 862```
 863
 864## Editor Scrollbar
 865
 866- Description: Whether or not to show the editor scrollbar and various elements in it.
 867- Setting: `scrollbar`
 868- Default:
 869
 870```json [settings]
 871"scrollbar": {
 872  "show": "auto",
 873  "cursors": true,
 874  "git_diff": true,
 875  "search_results": true,
 876  "selected_text": true,
 877  "selected_symbol": true,
 878  "diagnostics": "all",
 879  "axes": {
 880    "horizontal": true,
 881    "vertical": true,
 882  },
 883},
 884```
 885
 886### Show Mode
 887
 888- Description: When to show the editor scrollbar.
 889- Setting: `show`
 890- Default: `auto`
 891
 892**Options**
 893
 8941. Show the scrollbar if there's important information or follow the system's configured behavior:
 895
 896```json [settings]
 897"scrollbar": {
 898  "show": "auto"
 899}
 900```
 901
 9022. Match the system's configured behavior:
 903
 904```json [settings]
 905"scrollbar": {
 906  "show": "system"
 907}
 908```
 909
 9103. Always show the scrollbar:
 911
 912```json [settings]
 913"scrollbar": {
 914  "show": "always"
 915}
 916```
 917
 9184. Never show the scrollbar:
 919
 920```json [settings]
 921"scrollbar": {
 922  "show": "never"
 923}
 924```
 925
 926### Cursor Indicators
 927
 928- Description: Whether to show cursor positions in the scrollbar.
 929- Setting: `cursors`
 930- Default: `true`
 931
 932Cursor indicators appear as small marks on the scrollbar showing where other collaborators' cursors are positioned in the file.
 933
 934**Options**
 935
 936`boolean` values
 937
 938### Git Diff Indicators
 939
 940- Description: Whether to show git diff indicators in the scrollbar.
 941- Setting: `git_diff`
 942- Default: `true`
 943
 944Git diff indicators appear as colored marks showing lines that have been added, modified, or deleted compared to the git HEAD.
 945
 946**Options**
 947
 948`boolean` values
 949
 950### Search Results Indicators
 951
 952- Description: Whether to show buffer search results in the scrollbar.
 953- Setting: `search_results`
 954- Default: `true`
 955
 956Search result indicators appear as marks showing all locations in the file where your current search query matches.
 957
 958**Options**
 959
 960`boolean` values
 961
 962### Selected Text Indicators
 963
 964- Description: Whether to show selected text occurrences in the scrollbar.
 965- Setting: `selected_text`
 966- Default: `true`
 967
 968Selected text indicators appear as marks showing all occurrences of the currently selected text throughout the file.
 969
 970**Options**
 971
 972`boolean` values
 973
 974### Selected Symbols Indicators
 975
 976- Description: Whether to show selected symbol occurrences in the scrollbar.
 977- Setting: `selected_symbol`
 978- Default: `true`
 979
 980Selected symbol indicators appear as marks showing all occurrences of the currently selected symbol (like a function or variable name) throughout the file.
 981
 982**Options**
 983
 984`boolean` values
 985
 986### Diagnostics
 987
 988- Description: Which diagnostic indicators to show in the scrollbar.
 989- Setting: `diagnostics`
 990- Default: `all`
 991
 992Diagnostic indicators appear as colored marks showing errors, warnings, and other language server diagnostics at their corresponding line positions in the file.
 993
 994**Options**
 995
 9961. Show all diagnostics:
 997
 998```json [settings]
 999{
1000  "show_diagnostics": "all"
1001}
1002```
1003
10042. Do not show any diagnostics:
1005
1006```json [settings]
1007{
1008  "show_diagnostics": "off"
1009}
1010```
1011
10123. Show only errors:
1013
1014```json [settings]
1015{
1016  "show_diagnostics": "error"
1017}
1018```
1019
10204. Show only errors and warnings:
1021
1022```json [settings]
1023{
1024  "show_diagnostics": "warning"
1025}
1026```
1027
10285. Show only errors, warnings, and information:
1029
1030```json [settings]
1031{
1032  "show_diagnostics": "info"
1033}
1034```
1035
1036### Axes
1037
1038- Description: Forcefully enable or disable the scrollbar for each axis
1039- Setting: `axes`
1040- Default:
1041
1042```json [settings]
1043"scrollbar": {
1044  "axes": {
1045    "horizontal": true,
1046    "vertical": true,
1047  },
1048}
1049```
1050
1051#### Horizontal
1052
1053- Description: When false, forcefully disables the horizontal scrollbar. Otherwise, obey other settings.
1054- Setting: `horizontal`
1055- Default: `true`
1056
1057**Options**
1058
1059`boolean` values
1060
1061#### Vertical
1062
1063- Description: When false, forcefully disables the vertical scrollbar. Otherwise, obey other settings.
1064- Setting: `vertical`
1065- Default: `true`
1066
1067**Options**
1068
1069`boolean` values
1070
1071## Minimap
1072
1073- Description: Settings related to the editor's minimap, which provides an overview of your document.
1074- Setting: `minimap`
1075- Default:
1076
1077```json [settings]
1078{
1079  "minimap": {
1080    "show": "never",
1081    "thumb": "always",
1082    "thumb_border": "left_open",
1083    "current_line_highlight": null
1084  }
1085}
1086```
1087
1088### Show Mode
1089
1090- Description: When to show the minimap in the editor.
1091- Setting: `show`
1092- Default: `never`
1093
1094**Options**
1095
10961. Always show the minimap:
1097
1098```json [settings]
1099{
1100  "show": "always"
1101}
1102```
1103
11042. Show the minimap if the editor's scrollbars are visible:
1105
1106```json [settings]
1107{
1108  "show": "auto"
1109}
1110```
1111
11123. Never show the minimap:
1113
1114```json [settings]
1115{
1116  "show": "never"
1117}
1118```
1119
1120### Thumb Display
1121
1122- Description: When to show the minimap thumb (the visible editor area) in the minimap.
1123- Setting: `thumb`
1124- Default: `always`
1125
1126**Options**
1127
11281. Show the minimap thumb when hovering over the minimap:
1129
1130```json [settings]
1131{
1132  "thumb": "hover"
1133}
1134```
1135
11362. Always show the minimap thumb:
1137
1138```json [settings]
1139{
1140  "thumb": "always"
1141}
1142```
1143
1144### Thumb Border
1145
1146- Description: How the minimap thumb border should look.
1147- Setting: `thumb_border`
1148- Default: `left_open`
1149
1150**Options**
1151
11521. Display a border on all sides of the thumb:
1153
1154```json [settings]
1155{
1156  "thumb_border": "full"
1157}
1158```
1159
11602. Display a border on all sides except the left side:
1161
1162```json [settings]
1163{
1164  "thumb_border": "left_open"
1165}
1166```
1167
11683. Display a border on all sides except the right side:
1169
1170```json [settings]
1171{
1172  "thumb_border": "right_open"
1173}
1174```
1175
11764. Display a border only on the left side:
1177
1178```json [settings]
1179{
1180  "thumb_border": "left_only"
1181}
1182```
1183
11845. Display the thumb without any border:
1185
1186```json [settings]
1187{
1188  "thumb_border": "none"
1189}
1190```
1191
1192### Current Line Highlight
1193
1194- Description: How to highlight the current line in the minimap.
1195- Setting: `current_line_highlight`
1196- Default: `null`
1197
1198**Options**
1199
12001. Inherit the editor's current line highlight setting:
1201
1202```json [settings]
1203{
1204  "minimap": {
1205    "current_line_highlight": null
1206  }
1207}
1208```
1209
12102. Highlight the current line in the minimap:
1211
1212```json [settings]
1213{
1214  "minimap": {
1215    "current_line_highlight": "line"
1216  }
1217}
1218```
1219
1220or
1221
1222```json [settings]
1223{
1224  "minimap": {
1225    "current_line_highlight": "all"
1226  }
1227}
1228```
1229
12303. Do not highlight the current line in the minimap:
1231
1232```json [settings]
1233{
1234  "minimap": {
1235    "current_line_highlight": "gutter"
1236  }
1237}
1238```
1239
1240or
1241
1242```json [settings]
1243{
1244  "minimap": {
1245    "current_line_highlight": "none"
1246  }
1247}
1248```
1249
1250## Editor Tab Bar
1251
1252- Description: Settings related to the editor's tab bar.
1253- Settings: `tab_bar`
1254- Default:
1255
1256```json [settings]
1257"tab_bar": {
1258  "show": true,
1259  "show_nav_history_buttons": true,
1260  "show_tab_bar_buttons": true
1261}
1262```
1263
1264### Show
1265
1266- Description: Whether or not to show the tab bar in the editor.
1267- Setting: `show`
1268- Default: `true`
1269
1270**Options**
1271
1272`boolean` values
1273
1274### Navigation History Buttons
1275
1276- Description: Whether or not to show the navigation history buttons.
1277- Setting: `show_nav_history_buttons`
1278- Default: `true`
1279
1280**Options**
1281
1282`boolean` values
1283
1284### Tab Bar Buttons
1285
1286- Description: Whether or not to show the tab bar buttons.
1287- Setting: `show_tab_bar_buttons`
1288- Default: `true`
1289
1290**Options**
1291
1292`boolean` values
1293
1294## Editor Tabs
1295
1296- Description: Configuration for the editor tabs.
1297- Setting: `tabs`
1298- Default:
1299
1300```json [settings]
1301"tabs": {
1302  "close_position": "right",
1303  "file_icons": false,
1304  "git_status": false,
1305  "activate_on_close": "history",
1306  "show_close_button": "hover",
1307  "show_diagnostics": "off"
1308},
1309```
1310
1311### Close Position
1312
1313- Description: Where to display close button within a tab.
1314- Setting: `close_position`
1315- Default: `right`
1316
1317**Options**
1318
13191. Display the close button on the right:
1320
1321```json [settings]
1322{
1323  "close_position": "right"
1324}
1325```
1326
13272. Display the close button on the left:
1328
1329```json [settings]
1330{
1331  "close_position": "left"
1332}
1333```
1334
1335### File Icons
1336
1337- Description: Whether to show the file icon for a tab.
1338- Setting: `file_icons`
1339- Default: `false`
1340
1341### Git Status
1342
1343- Description: Whether or not to show Git file status in tab.
1344- Setting: `git_status`
1345- Default: `false`
1346
1347### Activate on close
1348
1349- Description: What to do after closing the current tab.
1350- Setting: `activate_on_close`
1351- Default: `history`
1352
1353**Options**
1354
13551.  Activate the tab that was open previously:
1356
1357```json [settings]
1358{
1359  "activate_on_close": "history"
1360}
1361```
1362
13632. Activate the right neighbour tab if present:
1364
1365```json [settings]
1366{
1367  "activate_on_close": "neighbour"
1368}
1369```
1370
13713. Activate the left neighbour tab if present:
1372
1373```json [settings]
1374{
1375  "activate_on_close": "left_neighbour"
1376}
1377```
1378
1379### Show close button
1380
1381- Description: Controls the appearance behavior of the tab's close button.
1382- Setting: `show_close_button`
1383- Default: `hover`
1384
1385**Options**
1386
13871.  Show it just upon hovering the tab:
1388
1389```json [settings]
1390{
1391  "show_close_button": "hover"
1392}
1393```
1394
13952. Show it persistently:
1396
1397```json [settings]
1398{
1399  "show_close_button": "always"
1400}
1401```
1402
14033. Never show it, even if hovering it:
1404
1405```json [settings]
1406{
1407  "show_close_button": "hidden"
1408}
1409```
1410
1411### Show Diagnostics
1412
1413- Description: Whether to show diagnostics indicators in tabs. This setting only works when file icons are active and controls which files with diagnostic issues to mark.
1414- Setting: `show_diagnostics`
1415- Default: `off`
1416
1417**Options**
1418
14191. Do not mark any files:
1420
1421```json [settings]
1422{
1423  "show_diagnostics": "off"
1424}
1425```
1426
14272. Only mark files with errors:
1428
1429```json [settings]
1430{
1431  "show_diagnostics": "errors"
1432}
1433```
1434
14353. Mark files with errors and warnings:
1436
1437```json [settings]
1438{
1439  "show_diagnostics": "all"
1440}
1441```
1442
1443### Show Inline Code Actions
1444
1445- Description: Whether to show code action button at start of buffer line.
1446- Setting: `inline_code_actions`
1447- Default: `true`
1448
1449**Options**
1450
1451`boolean` values
1452
1453### Drag And Drop Selection
1454
1455- Description: Whether to allow drag and drop text selection in buffer. `delay` is the milliseconds that must elapse before drag and drop is allowed. Otherwise, a new text selection is created.
1456- Setting: `drag_and_drop_selection`
1457- Default:
1458
1459```json [settings]
1460"drag_and_drop_selection": {
1461  "enabled": true,
1462  "delay": 300
1463}
1464```
1465
1466## Editor Toolbar
1467
1468- Description: Whether or not to show various elements in the editor toolbar.
1469- Setting: `toolbar`
1470- Default:
1471
1472```json [settings]
1473"toolbar": {
1474  "breadcrumbs": true,
1475  "quick_actions": true,
1476  "selections_menu": true,
1477  "agent_review": true,
1478  "code_actions": false
1479},
1480```
1481
1482**Options**
1483
1484Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
1485
1486## Use System Tabs
1487
1488- Description: Whether to allow windows to tab together based on the user’s tabbing preference (macOS only).
1489- Setting: `use_system_window_tabs`
1490- Default: `false`
1491
1492**Options**
1493
1494This 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.
1495
1496## Enable Language Server
1497
1498- Description: Whether or not to use language servers to provide code intelligence.
1499- Setting: `enable_language_server`
1500- Default: `true`
1501
1502**Options**
1503
1504`boolean` values
1505
1506## Ensure Final Newline On Save
1507
1508- Description: Removes any lines containing only whitespace at the end of the file and ensures just one newline at the end.
1509- Setting: `ensure_final_newline_on_save`
1510- Default: `true`
1511
1512**Options**
1513
1514`boolean` values
1515
1516## Expand Excerpt Lines
1517
1518- Description: The default number of lines to expand excerpts in the multibuffer by
1519- Setting: `expand_excerpt_lines`
1520- Default: `5`
1521
1522**Options**
1523
1524Positive `integer` values
1525
1526## Excerpt Context Lines
1527
1528- Description: The number of lines of context to provide when showing excerpts in the multibuffer.
1529- Setting: `excerpt_context_lines`
1530- Default: `2`
1531
1532**Options**
1533
1534Positive `integer` value between 1 and 32. Values outside of this range will be clamped to this range.
1535
1536## Extend Comment On Newline
1537
1538- Description: Whether to start a new line with a comment when a previous line is a comment as well.
1539- Setting: `extend_comment_on_newline`
1540- Default: `true`
1541
1542**Options**
1543
1544`boolean` values
1545
1546## Status Bar
1547
1548- Description: Control various elements in the status bar. Note that some items in the status bar have their own settings set elsewhere.
1549- Setting: `status_bar`
1550- Default:
1551
1552```json [settings]
1553"status_bar": {
1554  "active_language_button": true,
1555  "cursor_position_button": true,
1556  "line_endings_button": false
1557},
1558```
1559
1560There 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.
1561
1562```json
1563"status_bar": {
1564  "experimental.show": false
1565}
1566```
1567
1568## LSP
1569
1570- Description: Configuration for language servers.
1571- Setting: `lsp`
1572- Default: `null`
1573
1574**Options**
1575
1576The following settings can be overridden for specific language servers:
1577
1578- `initialization_options`
1579- `settings`
1580
1581To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
1582
1583Some 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.
1584
1585For example to pass the `check` option to `rust-analyzer`, use the following configuration:
1586
1587```json [settings]
1588"lsp": {
1589  "rust-analyzer": {
1590    "initialization_options": {
1591      "check": {
1592        "command": "clippy" // rust-analyzer.check.command (default: "check")
1593      }
1594    }
1595  }
1596}
1597```
1598
1599While other options may be changed at a runtime and should be placed under `settings`:
1600
1601```json [settings]
1602"lsp": {
1603  "yaml-language-server": {
1604    "settings": {
1605      "yaml": {
1606        "keyOrdering": true // Enforces alphabetical ordering of keys in maps
1607      }
1608    }
1609  }
1610}
1611```
1612
1613## Global LSP Settings
1614
1615- Description: Configuration for global LSP settings that apply to all language servers
1616- Setting: `global_lsp_settings`
1617- Default:
1618
1619```json [settings]
1620{
1621  "global_lsp_settings": {
1622    "button": true
1623  }
1624}
1625```
1626
1627**Options**
1628
1629- `button`: Whether to show the LSP status button in the status bar
1630
1631## LSP Highlight Debounce
1632
1633- Description: The debounce delay in milliseconds before querying highlights from the language server based on the current cursor location.
1634- Setting: `lsp_highlight_debounce`
1635- Default: `75`
1636
1637**Options**
1638
1639`integer` values representing milliseconds
1640
1641## Features
1642
1643- Description: Features that can be globally enabled or disabled
1644- Setting: `features`
1645- Default:
1646
1647```json [settings]
1648{
1649  "features": {
1650    "edit_prediction_provider": "zed"
1651  }
1652}
1653```
1654
1655### Edit Prediction Provider
1656
1657- Description: Which edit prediction provider to use
1658- Setting: `edit_prediction_provider`
1659- Default: `"zed"`
1660
1661**Options**
1662
16631. Use Zeta as the edit prediction provider:
1664
1665```json [settings]
1666{
1667  "features": {
1668    "edit_prediction_provider": "zed"
1669  }
1670}
1671```
1672
16732. Use Copilot as the edit prediction provider:
1674
1675```json [settings]
1676{
1677  "features": {
1678    "edit_prediction_provider": "copilot"
1679  }
1680}
1681```
1682
16833. Use Supermaven as the edit prediction provider:
1684
1685```json [settings]
1686{
1687  "features": {
1688    "edit_prediction_provider": "supermaven"
1689  }
1690}
1691```
1692
16934. Turn off edit predictions across all providers
1694
1695```json [settings]
1696{
1697  "features": {
1698    "edit_prediction_provider": "none"
1699  }
1700}
1701```
1702
1703## Format On Save
1704
1705- Description: Whether or not to perform a buffer format before saving.
1706- Setting: `format_on_save`
1707- Default: `on`
1708
1709**Options**
1710
17111. `on`, enables format on save obeying `formatter` setting:
1712
1713```json [settings]
1714{
1715  "format_on_save": "on"
1716}
1717```
1718
17192. `off`, disables format on save:
1720
1721```json [settings]
1722{
1723  "format_on_save": "off"
1724}
1725```
1726
1727## Formatter
1728
1729- Description: How to perform a buffer format.
1730- Setting: `formatter`
1731- Default: `auto`
1732
1733**Options**
1734
17351. To use the current language server, use `"language_server"`:
1736
1737```json [settings]
1738{
1739  "formatter": "language_server"
1740}
1741```
1742
17432. Or to use an external command, use `"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)`](https://linux.die.net/man/1/sed):
1744
1745```json [settings]
1746{
1747  "formatter": {
1748    "external": {
1749      "command": "sed",
1750      "arguments": ["-e", "s/ *$//"]
1751    }
1752  }
1753}
1754```
1755
17563. External formatters may optionally include a `{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.
1757
1758WARNING: `{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.
1759
1760```json [settings]
1761  "formatter": {
1762    "external": {
1763      "command": "prettier",
1764      "arguments": ["--stdin-filepath", "{buffer_path}"]
1765    }
1766  }
1767```
1768
17694. Or to use code actions provided by the connected language servers, use `"code_actions"`:
1770
1771```json [settings]
1772{
1773  "formatter": [
1774    // Use ESLint's --fix:
1775    { "code_action": "source.fixAll.eslint" },
1776    // Organize imports on save:
1777    { "code_action": "source.organizeImports" }
1778  ]
1779}
1780```
1781
17825. Or to use multiple formatters consecutively, use an array of formatters:
1783
1784```json [settings]
1785{
1786  "formatter": [
1787    { "language_server": { "name": "rust-analyzer" } },
1788    {
1789      "external": {
1790        "command": "sed",
1791        "arguments": ["-e", "s/ *$//"]
1792      }
1793    }
1794  ]
1795}
1796```
1797
1798Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1799If any of the formatters fails, the subsequent ones will still be executed.
1800
1801## Auto close
1802
1803- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1804- Setting: `use_autoclose`
1805- Default: `true`
1806
1807**Options**
1808
1809`boolean` values
1810
1811## Always Treat Brackets As Autoclosed
1812
1813- Description: Controls how the editor handles the autoclosed characters.
1814- Setting: `always_treat_brackets_as_autoclosed`
1815- Default: `false`
1816
1817**Options**
1818
1819`boolean` values
1820
1821**Example**
1822
1823If the setting is set to `true`:
1824
18251. Enter in the editor: `)))`
18262. Move the cursor to the start: `^)))`
18273. Enter again: `)))`
1828
1829The result is still `)))` and not `))))))`, which is what it would be by default.
1830
1831## File Scan Exclusions
1832
1833- Setting: `file_scan_exclusions`
1834- Description: Files or globs of files that will be excluded by Zed entirely. They will be skipped during file scans, file searches, and not be displayed in the project file tree. Overrides `file_scan_inclusions`.
1835- Default:
1836
1837```json [settings]
1838"file_scan_exclusions": [
1839  "**/.git",
1840  "**/.svn",
1841  "**/.hg",
1842  "**/.jj",
1843  "**/CVS",
1844  "**/.DS_Store",
1845  "**/Thumbs.db",
1846  "**/.classpath",
1847  "**/.settings"
1848],
1849```
1850
1851Note, 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.
1852
1853## File Scan Inclusions
1854
1855- Setting: `file_scan_inclusions`
1856- Description: Files or globs of files that will be included by Zed, even when ignored by git. This is useful for files that are not tracked by git, but are still important to your project. Note that globs that are overly broad can slow down Zed's file scanning. `file_scan_exclusions` takes precedence over these inclusions.
1857- Default:
1858
1859```json [settings]
1860"file_scan_inclusions": [".env*"],
1861```
1862
1863## File Types
1864
1865- Setting: `file_types`
1866- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1867- Default:
1868
1869```json [settings]
1870"file_types": {
1871  "JSONC": ["**/.zed/**/*.json", "**/zed/**/*.json", "**/Zed/**/*.json", "**/.vscode/**/*.json"],
1872  "Shell Script": [".env.*"]
1873}
1874```
1875
1876**Examples**
1877
1878To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1879
1880```json [settings]
1881{
1882  "file_types": {
1883    "C++": ["c"],
1884    "TOML": ["MyLockFile"],
1885    "Dockerfile": ["Dockerfile*"]
1886  }
1887}
1888```
1889
1890## Diagnostics
1891
1892- Description: Configuration for diagnostics-related features.
1893- Setting: `diagnostics`
1894- Default:
1895
1896```json [settings]
1897{
1898  "diagnostics": {
1899    "include_warnings": true,
1900    "inline": {
1901      "enabled": false
1902    },
1903    "update_with_cursor": false,
1904    "primary_only": false,
1905    "use_rendered": false
1906  }
1907}
1908```
1909
1910### Inline Diagnostics
1911
1912- Description: Whether or not to show diagnostics information inline.
1913- Setting: `inline`
1914- Default:
1915
1916```json [settings]
1917{
1918  "diagnostics": {
1919    "inline": {
1920      "enabled": false,
1921      "update_debounce_ms": 150,
1922      "padding": 4,
1923      "min_column": 0,
1924      "max_severity": null
1925    }
1926  }
1927}
1928```
1929
1930**Options**
1931
19321. Enable inline diagnostics.
1933
1934```json [settings]
1935{
1936  "diagnostics": {
1937    "inline": {
1938      "enabled": true
1939    }
1940  }
1941}
1942```
1943
19442. Delay diagnostic updates until some time after the last diagnostic update.
1945
1946```json [settings]
1947{
1948  "diagnostics": {
1949    "inline": {
1950      "enabled": true,
1951      "update_debounce_ms": 150
1952    }
1953  }
1954}
1955```
1956
19573. Set padding between the end of the source line and the start of the diagnostic.
1958
1959```json [settings]
1960{
1961  "diagnostics": {
1962    "inline": {
1963      "enabled": true,
1964      "padding": 4
1965    }
1966  }
1967}
1968```
1969
19704. Horizontally align inline diagnostics at the given column.
1971
1972```json [settings]
1973{
1974  "diagnostics": {
1975    "inline": {
1976      "enabled": true,
1977      "min_column": 80
1978    }
1979  }
1980}
1981```
1982
19835. Show only warning and error diagnostics.
1984
1985```json [settings]
1986{
1987  "diagnostics": {
1988    "inline": {
1989      "enabled": true,
1990      "max_severity": "warning"
1991    }
1992  }
1993}
1994```
1995
1996## Git
1997
1998- Description: Configuration for git-related features.
1999- Setting: `git`
2000- Default:
2001
2002```json [settings]
2003{
2004  "git": {
2005    "git_gutter": "tracked_files",
2006    "inline_blame": {
2007      "enabled": true
2008    },
2009    "branch_picker": {
2010      "show_author_name": true
2011    },
2012    "hunk_style": "staged_hollow"
2013  }
2014}
2015```
2016
2017### Git Gutter
2018
2019- Description: Whether or not to show the git gutter.
2020- Setting: `git_gutter`
2021- Default: `tracked_files`
2022
2023**Options**
2024
20251. Show git gutter in tracked files
2026
2027```json [settings]
2028{
2029  "git": {
2030    "git_gutter": "tracked_files"
2031  }
2032}
2033```
2034
20352. Hide git gutter
2036
2037```json [settings]
2038{
2039  "git": {
2040    "git_gutter": "hide"
2041  }
2042}
2043```
2044
2045### Gutter Debounce
2046
2047- Description: Sets the debounce threshold (in milliseconds) after which changes are reflected in the git gutter.
2048- Setting: `gutter_debounce`
2049- Default: `null`
2050
2051**Options**
2052
2053`integer` values representing milliseconds
2054
2055Example:
2056
2057```json [settings]
2058{
2059  "git": {
2060    "gutter_debounce": 100
2061  }
2062}
2063```
2064
2065### Inline Git Blame
2066
2067- Description: Whether or not to show git blame information inline, on the currently focused line.
2068- Setting: `inline_blame`
2069- Default:
2070
2071```json [settings]
2072{
2073  "git": {
2074    "inline_blame": {
2075      "enabled": true
2076    }
2077  }
2078}
2079```
2080
2081**Options**
2082
20831. Disable inline git blame:
2084
2085```json [settings]
2086{
2087  "git": {
2088    "inline_blame": {
2089      "enabled": false
2090    }
2091  }
2092}
2093```
2094
20952. Only show inline git blame after a delay (that starts after cursor stops moving):
2096
2097```json [settings]
2098{
2099  "git": {
2100    "inline_blame": {
2101      "delay_ms": 500
2102    }
2103  }
2104}
2105```
2106
21073. Show a commit summary next to the commit date and author:
2108
2109```json [settings]
2110{
2111  "git": {
2112    "inline_blame": {
2113      "show_commit_summary": true
2114    }
2115  }
2116}
2117```
2118
21194. Use this as the minimum column at which to display inline blame information:
2120
2121```json [settings]
2122{
2123  "git": {
2124    "inline_blame": {
2125      "min_column": 80
2126    }
2127  }
2128}
2129```
2130
21315. Set the padding between the end of the line and the inline blame hint, in ems:
2132
2133```json [settings]
2134{
2135  "git": {
2136    "inline_blame": {
2137      "padding": 10
2138    }
2139  }
2140}
2141```
2142
2143### Branch Picker
2144
2145- Description: Configuration related to the branch picker.
2146- Setting: `branch_picker`
2147- Default:
2148
2149```json [settings]
2150{
2151  "git": {
2152    "branch_picker": {
2153      "show_author_name": false
2154    }
2155  }
2156}
2157```
2158
2159**Options**
2160
21611. Show the author name in the branch picker:
2162
2163```json [settings]
2164{
2165  "git": {
2166    "branch_picker": {
2167      "show_author_name": true
2168    }
2169  }
2170}
2171```
2172
2173### Hunk Style
2174
2175- Description: What styling we should use for the diff hunks.
2176- Setting: `hunk_style`
2177- Default:
2178
2179```json [settings]
2180{
2181  "git": {
2182    "hunk_style": "staged_hollow"
2183  }
2184}
2185```
2186
2187**Options**
2188
21891. Show the staged hunks faded out and with a border:
2190
2191```json [settings]
2192{
2193  "git": {
2194    "hunk_style": "staged_hollow"
2195  }
2196}
2197```
2198
21992. Show unstaged hunks faded out and with a border:
2200
2201```json [settings]
2202{
2203  "git": {
2204    "hunk_style": "unstaged_hollow"
2205  }
2206}
2207```
2208
2209## Go to Definition Fallback
2210
2211- Description: What to do when the {#action editor::GoToDefinition} action fails to find a definition
2212- Setting: `go_to_definition_fallback`
2213- Default: `"find_all_references"`
2214
2215**Options**
2216
22171. Do nothing:
2218
2219```json [settings]
2220{
2221  "go_to_definition_fallback": "none"
2222}
2223```
2224
22252. Find references for the same symbol (default):
2226
2227```json [settings]
2228{
2229  "go_to_definition_fallback": "find_all_references"
2230}
2231```
2232
2233## Hard Tabs
2234
2235- Description: Whether to indent lines using tab characters or multiple spaces.
2236- Setting: `hard_tabs`
2237- Default: `false`
2238
2239**Options**
2240
2241`boolean` values
2242
2243## Helix Mode
2244
2245- Description: Whether or not to enable Helix mode. Enabling `helix_mode` also enables `vim_mode`. See the [Helix documentation](./helix.md) for more details.
2246- Setting: `helix_mode`
2247- Default: `false`
2248
2249**Options**
2250
2251`boolean` values
2252
2253## Indent Guides
2254
2255- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
2256- Setting: `indent_guides`
2257- Default:
2258
2259```json [settings]
2260{
2261  "indent_guides": {
2262    "enabled": true,
2263    "line_width": 1,
2264    "active_line_width": 1,
2265    "coloring": "fixed",
2266    "background_coloring": "disabled"
2267  }
2268}
2269```
2270
2271**Options**
2272
22731. Disable indent guides
2274
2275```json [settings]
2276{
2277  "indent_guides": {
2278    "enabled": false
2279  }
2280}
2281```
2282
22832. Enable indent guides for a specific language.
2284
2285```json [settings]
2286{
2287  "languages": {
2288    "Python": {
2289      "indent_guides": {
2290        "enabled": true
2291      }
2292    }
2293  }
2294}
2295```
2296
22973. Enable indent aware coloring ("rainbow indentation").
2298   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.
2299
2300```json [settings]
2301{
2302  "indent_guides": {
2303    "enabled": true,
2304    "coloring": "indent_aware"
2305  }
2306}
2307```
2308
23094. Enable indent aware background coloring ("rainbow indentation").
2310   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.
2311
2312```json [settings]
2313{
2314  "indent_guides": {
2315    "enabled": true,
2316    "coloring": "indent_aware",
2317    "background_coloring": "indent_aware"
2318  }
2319}
2320```
2321
2322## Hover Popover Enabled
2323
2324- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
2325- Setting: `hover_popover_enabled`
2326- Default: `true`
2327
2328**Options**
2329
2330`boolean` values
2331
2332## Hover Popover Delay
2333
2334- Description: Time to wait in milliseconds before showing the informational hover box.
2335- Setting: `hover_popover_delay`
2336- Default: `300`
2337
2338**Options**
2339
2340`integer` values representing milliseconds
2341
2342## Icon Theme
2343
2344- Description: The icon theme setting can be specified in two forms - either as the name of an icon theme or as an object containing the `mode`, `dark`, and `light` icon themes for files/folders inside Zed.
2345- Setting: `icon_theme`
2346- Default: `Zed (Default)`
2347
2348### Icon Theme Object
2349
2350- Description: Specify the icon theme using an object that includes the `mode`, `dark`, and `light`.
2351- Setting: `icon_theme`
2352- Default:
2353
2354```json [settings]
2355"icon_theme": {
2356  "mode": "system",
2357  "dark": "Zed (Default)",
2358  "light": "Zed (Default)"
2359},
2360```
2361
2362### Mode
2363
2364- Description: Specify the icon theme mode.
2365- Setting: `mode`
2366- Default: `system`
2367
2368**Options**
2369
23701. Set the icon theme to dark mode
2371
2372```json [settings]
2373{
2374  "mode": "dark"
2375}
2376```
2377
23782. Set the icon theme to light mode
2379
2380```json [settings]
2381{
2382  "mode": "light"
2383}
2384```
2385
23863. Set the icon theme to system mode
2387
2388```json [settings]
2389{
2390  "mode": "system"
2391}
2392```
2393
2394### Dark
2395
2396- Description: The name of the dark icon theme.
2397- Setting: `dark`
2398- Default: `Zed (Default)`
2399
2400**Options**
2401
2402Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
2403
2404### Light
2405
2406- Description: The name of the light icon theme.
2407- Setting: `light`
2408- Default: `Zed (Default)`
2409
2410**Options**
2411
2412Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
2413
2414## Image Viewer
2415
2416- Description: Settings for image viewer functionality
2417- Setting: `image_viewer`
2418- Default:
2419
2420```json [settings]
2421{
2422  "image_viewer": {
2423    "unit": "binary"
2424  }
2425}
2426```
2427
2428**Options**
2429
2430### Unit
2431
2432- Description: The unit for image file sizes
2433- Setting: `unit`
2434- Default: `"binary"`
2435
2436**Options**
2437
24381. Use binary units (KiB, MiB):
2439
2440```json [settings]
2441{
2442  "image_viewer": {
2443    "unit": "binary"
2444  }
2445}
2446```
2447
24482. Use decimal units (KB, MB):
2449
2450```json [settings]
2451{
2452  "image_viewer": {
2453    "unit": "decimal"
2454  }
2455}
2456```
2457
2458## Inlay hints
2459
2460- Description: Configuration for displaying extra text with hints in the editor.
2461- Setting: `inlay_hints`
2462- Default:
2463
2464```json [settings]
2465"inlay_hints": {
2466  "enabled": false,
2467  "show_type_hints": true,
2468  "show_parameter_hints": true,
2469  "show_other_hints": true,
2470  "show_background": false,
2471  "edit_debounce_ms": 700,
2472  "scroll_debounce_ms": 50,
2473  "toggle_on_modifiers_press": null
2474}
2475```
2476
2477**Options**
2478
2479Inlay hints querying consists of two parts: editor (client) and LSP server.
2480With 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.
2481At 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.
2482
2483The following languages have inlay hints preconfigured by Zed:
2484
2485- [Go](https://docs.zed.dev/languages/go)
2486- [Rust](https://docs.zed.dev/languages/rust)
2487- [Svelte](https://docs.zed.dev/languages/svelte)
2488- [TypeScript](https://docs.zed.dev/languages/typescript)
2489
2490Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
2491
2492Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
2493Settings-related hint updates are not debounced.
2494
2495All possible config values for `toggle_on_modifiers_press` are:
2496
2497```json [settings]
2498"inlay_hints": {
2499  "toggle_on_modifiers_press": {
2500    "control": true,
2501    "shift": true,
2502    "alt": true,
2503    "platform": true,
2504    "function": true
2505  }
2506}
2507```
2508
2509Unspecified values have a `false` value, hints won't be toggled if all the modifiers are `false` or not all the modifiers are pressed.
2510
2511## Journal
2512
2513- Description: Configuration for the journal.
2514- Setting: `journal`
2515- Default:
2516
2517```json [settings]
2518"journal": {
2519  "path": "~",
2520  "hour_format": "hour12"
2521}
2522```
2523
2524### Path
2525
2526- Description: The path of the directory where journal entries are stored.
2527- Setting: `path`
2528- Default: `~`
2529
2530**Options**
2531
2532`string` values
2533
2534### Hour Format
2535
2536- Description: The format to use for displaying hours in the journal.
2537- Setting: `hour_format`
2538- Default: `hour12`
2539
2540**Options**
2541
25421. 12-hour format:
2543
2544```json [settings]
2545{
2546  "hour_format": "hour12"
2547}
2548```
2549
25502. 24-hour format:
2551
2552```json [settings]
2553{
2554  "hour_format": "hour24"
2555}
2556```
2557
2558## JSX Tag Auto Close
2559
2560- Description: Whether to automatically close JSX tags
2561- Setting: `jsx_tag_auto_close`
2562- Default:
2563
2564```json [settings]
2565{
2566  "jsx_tag_auto_close": {
2567    "enabled": true
2568  }
2569}
2570```
2571
2572**Options**
2573
2574- `enabled`: Whether to enable automatic JSX tag closing
2575
2576## Languages
2577
2578- Description: Configuration for specific languages.
2579- Setting: `languages`
2580- Default: `null`
2581
2582**Options**
2583
2584To override settings for a language, add an entry for that languages name to the `languages` value. Example:
2585
2586```json [settings]
2587"languages": {
2588  "C": {
2589    "format_on_save": "off",
2590    "preferred_line_length": 64,
2591    "soft_wrap": "preferred_line_length"
2592  },
2593  "JSON": {
2594    "tab_size": 4
2595  }
2596}
2597```
2598
2599The following settings can be overridden for each specific language:
2600
2601- [`enable_language_server`](#enable-language-server)
2602- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
2603- [`format_on_save`](#format-on-save)
2604- [`formatter`](#formatter)
2605- [`hard_tabs`](#hard-tabs)
2606- [`preferred_line_length`](#preferred-line-length)
2607- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
2608- [`show_edit_predictions`](#show-edit-predictions)
2609- [`show_whitespaces`](#show-whitespaces)
2610- [`whitespace_map`](#whitespace-map)
2611- [`soft_wrap`](#soft-wrap)
2612- [`tab_size`](#tab-size)
2613- [`use_autoclose`](#use-autoclose)
2614- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
2615
2616These values take in the same options as the root-level settings with the same name.
2617
2618## Language Models
2619
2620- Description: Configuration for language model providers
2621- Setting: `language_models`
2622- Default:
2623
2624```json [settings]
2625{
2626  "language_models": {
2627    "anthropic": {
2628      "api_url": "https://api.anthropic.com"
2629    },
2630    "google": {
2631      "api_url": "https://generativelanguage.googleapis.com"
2632    },
2633    "ollama": {
2634      "api_url": "http://localhost:11434"
2635    },
2636    "openai": {
2637      "api_url": "https://api.openai.com/v1"
2638    }
2639  }
2640}
2641```
2642
2643**Options**
2644
2645Configuration for various AI model providers including API URLs and authentication settings.
2646
2647## Line Indicator Format
2648
2649- Description: Format for line indicator in the status bar
2650- Setting: `line_indicator_format`
2651- Default: `"short"`
2652
2653**Options**
2654
26551. Short format:
2656
2657```json [settings]
2658{
2659  "line_indicator_format": "short"
2660}
2661```
2662
26632. Long format:
2664
2665```json [settings]
2666{
2667  "line_indicator_format": "long"
2668}
2669```
2670
2671## Linked Edits
2672
2673- Description: Whether to perform linked edits of associated ranges, if the language server supports it. For example, when editing opening `<html>` tag, the contents of the closing `</html>` tag will be edited as well.
2674- Setting: `linked_edits`
2675- Default: `true`
2676
2677**Options**
2678
2679`boolean` values
2680
2681## LSP Document Colors
2682
2683- Description: Whether to show document color information from the language server
2684- Setting: `lsp_document_colors`
2685- Default: `true`
2686
2687**Options**
2688
2689`boolean` values
2690
2691## Max Tabs
2692
2693- Description: Maximum number of tabs to show in the tab bar
2694- Setting: `max_tabs`
2695- Default: `null`
2696
2697**Options**
2698
2699Positive `integer` values or `null` for unlimited tabs
2700
2701## Middle Click Paste (Linux only)
2702
2703- Description: Enable middle-click paste on Linux
2704- Setting: `middle_click_paste`
2705- Default: `true`
2706
2707**Options**
2708
2709`boolean` values
2710
2711## Multi Cursor Modifier
2712
2713- Description: Determines the modifier to be used to add multiple cursors with the mouse. The open hover link mouse gestures will adapt such that it do not conflict with the multicursor modifier.
2714- Setting: `multi_cursor_modifier`
2715- Default: `alt`
2716
2717**Options**
2718
27191. Maps to `Alt` on Linux and Windows and to `Option` on macOS:
2720
2721```json [settings]
2722{
2723  "multi_cursor_modifier": "alt"
2724}
2725```
2726
27272. Maps `Control` on Linux and Windows and to `Command` on macOS:
2728
2729```json [settings]
2730{
2731  "multi_cursor_modifier": "cmd_or_ctrl" // alias: "cmd", "ctrl"
2732}
2733```
2734
2735## Node
2736
2737- Description: Configuration for Node.js integration
2738- Setting: `node`
2739- Default:
2740
2741```json [settings]
2742{
2743  "node": {
2744    "ignore_system_version": false,
2745    "path": null,
2746    "npm_path": null
2747  }
2748}
2749```
2750
2751**Options**
2752
2753- `ignore_system_version`: Whether to ignore the system Node.js version
2754- `path`: Custom path to Node.js binary
2755- `npm_path`: Custom path to npm binary
2756
2757## Network Proxy
2758
2759- Description: Configure a network proxy for Zed.
2760- Setting: `proxy`
2761- Default: `null`
2762
2763**Options**
2764
2765The proxy setting must contain a URL to the proxy.
2766
2767The following URI schemes are supported:
2768
2769- `http`
2770- `https`
2771- `socks4` - SOCKS4 proxy with local DNS
2772- `socks4a` - SOCKS4 proxy with remote DNS
2773- `socks5` - SOCKS5 proxy with local DNS
2774- `socks5h` - SOCKS5 proxy with remote DNS
2775
2776`http` will be used when no scheme is specified.
2777
2778By 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`.
2779
2780For example, to set an `http` proxy, add the following to your settings:
2781
2782```json [settings]
2783{
2784  "proxy": "http://127.0.0.1:10809"
2785}
2786```
2787
2788Or to set a `socks5` proxy:
2789
2790```json [settings]
2791{
2792  "proxy": "socks5h://localhost:10808"
2793}
2794```
2795
2796If 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](https://docs.rs/reqwest/latest/reqwest/struct.NoProxy.html#method.from_string) for more.
2797
2798## On Last Window Closed
2799
2800- Description: What to do when the last window is closed
2801- Setting: `on_last_window_closed`
2802- Default: `"platform_default"`
2803
2804**Options**
2805
28061. Use platform default behavior:
2807
2808```json [settings]
2809{
2810  "on_last_window_closed": "platform_default"
2811}
2812```
2813
28142. Always quit the application:
2815
2816```json [settings]
2817{
2818  "on_last_window_closed": "quit_app"
2819}
2820```
2821
2822## Profiles
2823
2824- Description: Configuration profiles that can be applied on top of existing settings
2825- Setting: `profiles`
2826- Default: `{}`
2827
2828**Options**
2829
2830Configuration object for defining settings profiles. Example:
2831
2832```json [settings]
2833{
2834  "profiles": {
2835    "presentation": {
2836      "buffer_font_size": 20,
2837      "ui_font_size": 18,
2838      "theme": "One Light"
2839    }
2840  }
2841}
2842```
2843
2844## Preview tabs
2845
2846- Description:
2847  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. \
2848   There are several ways to convert a preview tab into a regular tab:
2849
2850  - Double-clicking on the file
2851  - Double-clicking on the tab header
2852  - Using the {#action project_panel::OpenPermanent} action
2853  - Editing the file
2854  - Dragging the file to a different pane
2855
2856- Setting: `preview_tabs`
2857- Default:
2858
2859```json [settings]
2860"preview_tabs": {
2861  "enabled": true,
2862  "enable_preview_from_file_finder": false,
2863  "enable_preview_from_code_navigation": false,
2864}
2865```
2866
2867### Enable preview from file finder
2868
2869- Description: Determines whether to open files in preview mode when selected from the file finder.
2870- Setting: `enable_preview_from_file_finder`
2871- Default: `false`
2872
2873**Options**
2874
2875`boolean` values
2876
2877### Enable preview from code navigation
2878
2879- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
2880- Setting: `enable_preview_from_code_navigation`
2881- Default: `false`
2882
2883**Options**
2884
2885`boolean` values
2886
2887## File Finder
2888
2889### File Icons
2890
2891- Description: Whether to show file icons in the file finder.
2892- Setting: `file_icons`
2893- Default: `true`
2894
2895### Modal Max Width
2896
2897- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
2898- Setting: `modal_max_width`
2899- Default: `small`
2900
2901### Skip Focus For Active In Search
2902
2903- Description: Determines whether the file finder should skip focus for the active file in search results.
2904- Setting: `skip_focus_for_active_in_search`
2905- Default: `true`
2906
2907## Pane Split Direction Horizontal
2908
2909- Description: The direction that you want to split panes horizontally
2910- Setting: `pane_split_direction_horizontal`
2911- Default: `"up"`
2912
2913**Options**
2914
29151. Split upward:
2916
2917```json [settings]
2918{
2919  "pane_split_direction_horizontal": "up"
2920}
2921```
2922
29232. Split downward:
2924
2925```json [settings]
2926{
2927  "pane_split_direction_horizontal": "down"
2928}
2929```
2930
2931## Pane Split Direction Vertical
2932
2933- Description: The direction that you want to split panes vertically
2934- Setting: `pane_split_direction_vertical`
2935- Default: `"left"`
2936
2937**Options**
2938
29391. Split to the left:
2940
2941```json [settings]
2942{
2943  "pane_split_direction_vertical": "left"
2944}
2945```
2946
29472. Split to the right:
2948
2949```json [settings]
2950{
2951  "pane_split_direction_vertical": "right"
2952}
2953```
2954
2955## Preferred Line Length
2956
2957- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
2958- Setting: `preferred_line_length`
2959- Default: `80`
2960
2961**Options**
2962
2963`integer` values
2964
2965## Private Files
2966
2967- Description: Globs to match against file paths to determine if a file is private
2968- Setting: `private_files`
2969- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/secrets.yml"]`
2970
2971**Options**
2972
2973List of `string` glob patterns
2974
2975## Projects Online By Default
2976
2977- Description: Whether or not to show the online projects view by default.
2978- Setting: `projects_online_by_default`
2979- Default: `true`
2980
2981**Options**
2982
2983`boolean` values
2984
2985## Read SSH Config
2986
2987- Description: Whether to read SSH configuration files
2988- Setting: `read_ssh_config`
2989- Default: `true`
2990
2991**Options**
2992
2993`boolean` values
2994
2995## Redact Private Values
2996
2997- Description: Hide the values of variables from visual display in private files
2998- Setting: `redact_private_values`
2999- Default: `false`
3000
3001**Options**
3002
3003`boolean` values
3004
3005## Relative Line Numbers
3006
3007- Description: Whether to show relative line numbers in the gutter
3008- Setting: `relative_line_numbers`
3009- Default: `"disabled"`
3010
3011**Options**
3012
30131. Show relative line numbers in the gutter whilst counting wrapped lines as one line:
3014
3015```json [settings]
3016{
3017  "relative_line_numbers": "enabled"
3018}
3019```
3020
30212. Show relative line numbers in the gutter, including wrapped lines in the counting:
3022
3023```json [settings]
3024{
3025  "relative_line_numbers": "wrapped"
3026}
3027```
3028
30292. Do not use relative line numbers:
3030
3031```json [settings]
3032{
3033  "relative_line_numbers": "disabled"
3034}
3035```
3036
3037## Remove Trailing Whitespace On Save
3038
3039- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
3040- Setting: `remove_trailing_whitespace_on_save`
3041- Default: `true`
3042
3043**Options**
3044
3045`boolean` values
3046
3047## Resize All Panels In Dock
3048
3049- Description: Whether to resize all the panels in a dock when resizing the dock. Can be a combination of "left", "right" and "bottom".
3050- Setting: `resize_all_panels_in_dock`
3051- Default: `["left"]`
3052
3053**Options**
3054
3055List of strings containing any combination of:
3056
3057- `"left"`: Resize left dock panels together
3058- `"right"`: Resize right dock panels together
3059- `"bottom"`: Resize bottom dock panels together
3060
3061## Restore on File Reopen
3062
3063- Description: Whether to attempt to restore previous file's state when opening it again. The state is stored per pane.
3064- Setting: `restore_on_file_reopen`
3065- Default: `true`
3066
3067**Options**
3068
3069`boolean` values
3070
3071## Restore on Startup
3072
3073- Description: Controls session restoration on startup.
3074- Setting: `restore_on_startup`
3075- Default: `last_session`
3076
3077**Options**
3078
30791. Restore all workspaces that were open when quitting Zed:
3080
3081```json [settings]
3082{
3083  "restore_on_startup": "last_session"
3084}
3085```
3086
30872. Restore the workspace that was closed last:
3088
3089```json [settings]
3090{
3091  "restore_on_startup": "last_workspace"
3092}
3093```
3094
30953. Always start with an empty editor:
3096
3097```json [settings]
3098{
3099  "restore_on_startup": "none"
3100}
3101```
3102
3103## Scroll Beyond Last Line
3104
3105- Description: Whether the editor will scroll beyond the last line
3106- Setting: `scroll_beyond_last_line`
3107- Default: `"one_page"`
3108
3109**Options**
3110
31111. Scroll one page beyond the last line by one page:
3112
3113```json [settings]
3114{
3115  "scroll_beyond_last_line": "one_page"
3116}
3117```
3118
31192. The editor will scroll beyond the last line by the same amount of lines as `vertical_scroll_margin`:
3120
3121```json [settings]
3122{
3123  "scroll_beyond_last_line": "vertical_scroll_margin"
3124}
3125```
3126
31273. The editor will not scroll beyond the last line:
3128
3129```json [settings]
3130{
3131  "scroll_beyond_last_line": "off"
3132}
3133```
3134
3135**Options**
3136
3137`boolean` values
3138
3139## Scroll Sensitivity
3140
3141- Description: Scroll sensitivity multiplier. This multiplier is applied to both the horizontal and vertical delta values while scrolling.
3142- Setting: `scroll_sensitivity`
3143- Default: `1.0`
3144
3145**Options**
3146
3147Positive `float` values
3148
3149### Fast Scroll Sensitivity
3150
3151- Description: Scroll sensitivity multiplier for fast scrolling. This multiplier is applied to both the horizontal and vertical delta values while scrolling. Fast scrolling happens when a user holds the alt or option key while scrolling.
3152- Setting: `fast_scroll_sensitivity`
3153- Default: `4.0`
3154
3155**Options**
3156
3157Positive `float` values
3158
3159### Horizontal Scroll Margin
3160
3161- Description: The number of characters to keep on either side when scrolling with the mouse
3162- Setting: `horizontal_scroll_margin`
3163- Default: `5`
3164
3165**Options**
3166
3167Non-negative `integer` values
3168
3169### Vertical Scroll Margin
3170
3171- Description: The number of lines to keep above/below the cursor when scrolling with the keyboard
3172- Setting: `vertical_scroll_margin`
3173- Default: `3`
3174
3175**Options**
3176
3177Non-negative `integer` values
3178
3179## Search
3180
3181- Description: Search options to enable by default when opening new project and buffer searches.
3182- Setting: `search`
3183- Default:
3184
3185```json [settings]
3186"search": {
3187  "button": true,
3188  "whole_word": false,
3189  "case_sensitive": false,
3190  "include_ignored": false,
3191  "regex": false,
3192  "center_on_match": false
3193},
3194```
3195
3196### Button
3197
3198- Description: Whether to show the project search button in the status bar.
3199- Setting: `button`
3200- Default: `true`
3201
3202### Whole Word
3203
3204- Description: Whether to only match on whole words.
3205- Setting: `whole_word`
3206- Default: `false`
3207
3208### Case Sensitive
3209
3210- Description: Whether to match case sensitively. This setting affects both
3211  searches and editor actions like "Select Next Occurrence", "Select Previous
3212  Occurrence", and "Select All Occurrences".
3213- Setting: `case_sensitive`
3214- Default: `false`
3215
3216### Include Ignore
3217
3218- Description: Whether to include gitignored files in search results.
3219- Setting: `include_ignored`
3220- Default: `false`
3221
3222### Regex
3223
3224- Description: Whether to interpret the search query as a regular expression.
3225- Setting: `regex`
3226- Default: `false`
3227
3228### Center On Match
3229
3230- Description: Whether to center the cursor on each search match when navigating.
3231- Setting: `center_on_match`
3232- Default: `false`
3233
3234## Search Wrap
3235
3236- Description: If `search_wrap` is disabled, search result do not wrap around the end of the file
3237- Setting: `search_wrap`
3238- Default: `true`
3239
3240## Center on Match
3241
3242- Description: If `center_on_match` is enabled, the editor will center the cursor on the current match when searching.
3243- Setting: `center_on_match`
3244- Default: `false`
3245
3246## Seed Search Query From Cursor
3247
3248- Description: When to populate a new search's query based on the text under the cursor.
3249- Setting: `seed_search_query_from_cursor`
3250- Default: `always`
3251
3252**Options**
3253
32541. `always` always populate the search query with the word under the cursor
32552. `selection` only populate the search query when there is text selected
32563. `never` never populate the search query
3257
3258## Use Smartcase Search
3259
3260- Description: When enabled, automatically adjusts search case sensitivity based on your query. If your search query contains any uppercase letters, the search becomes case-sensitive; if it contains only lowercase letters, the search becomes case-insensitive. \
3261  This applies to both in-file searches and project-wide searches.
3262- Setting: `use_smartcase_search`
3263- Default: `false`
3264
3265**Options**
3266
3267`boolean` values
3268
3269Examples:
3270
3271- Searching for "function" would match "function", "Function", "FUNCTION", etc.
3272- Searching for "Function" would only match "Function", not "function" or "FUNCTION"
3273
3274## Show Call Status Icon
3275
3276- Description: Whether or not to show the call status icon in the status bar.
3277- Setting: `show_call_status_icon`
3278- Default: `true`
3279
3280**Options**
3281
3282`boolean` values
3283
3284## Completions
3285
3286- Description: Controls how completions are processed for this language.
3287- Setting: `completions`
3288- Default:
3289
3290```json [settings]
3291{
3292  "completions": {
3293    "words": "fallback",
3294    "words_min_length": 3,
3295    "lsp": true,
3296    "lsp_fetch_timeout_ms": 0,
3297    "lsp_insert_mode": "replace_suffix"
3298  }
3299}
3300```
3301
3302### Words
3303
3304- Description: Controls how words are completed. For large documents, not all words may be fetched for completion.
3305- Setting: `words`
3306- Default: `fallback`
3307
3308**Options**
3309
33101. `enabled` - Always fetch document's words for completions along with LSP completions
33112. `fallback` - Only if LSP response errors or times out, use document's words to show completions
33123. `disabled` - Never fetch or complete document's words for completions (word-based completions can still be queried via a separate action)
3313
3314### Min Words Query Length
3315
3316- Description: Minimum number of characters required to automatically trigger word-based completions.
3317  Before that value, it's still possible to trigger the words-based completion manually with the corresponding editor command.
3318- Setting: `words_min_length`
3319- Default: `3`
3320
3321**Options**
3322
3323Positive integer values
3324
3325### LSP
3326
3327- Description: Whether to fetch LSP completions or not.
3328- Setting: `lsp`
3329- Default: `true`
3330
3331**Options**
3332
3333`boolean` values
3334
3335### LSP Fetch Timeout (ms)
3336
3337- Description: When fetching LSP completions, determines how long to wait for a response of a particular server. When set to 0, waits indefinitely.
3338- Setting: `lsp_fetch_timeout_ms`
3339- Default: `0`
3340
3341**Options**
3342
3343`integer` values representing milliseconds
3344
3345### LSP Insert Mode
3346
3347- Description: Controls what range to replace when accepting LSP completions.
3348- Setting: `lsp_insert_mode`
3349- Default: `replace_suffix`
3350
3351**Options**
3352
33531. `insert` - Replaces text before the cursor, using the `insert` range described in the LSP specification
33542. `replace` - Replaces text before and after the cursor, using the `replace` range described in the LSP specification
33553. `replace_subsequence` - Behaves like `"replace"` if the text that would be replaced is a subsequence of the completion text, and like `"insert"` otherwise
33564. `replace_suffix` - Behaves like `"replace"` if the text after the cursor is a suffix of the completion, and like `"insert"` otherwise
3357
3358## Show Completions On Input
3359
3360- Description: Whether or not to show completions as you type.
3361- Setting: `show_completions_on_input`
3362- Default: `true`
3363
3364**Options**
3365
3366`boolean` values
3367
3368## Show Completion Documentation
3369
3370- Description: Whether to display inline and alongside documentation for items in the completions menu.
3371- Setting: `show_completion_documentation`
3372- Default: `true`
3373
3374**Options**
3375
3376`boolean` values
3377
3378## Show Edit Predictions
3379
3380- Description: Whether to show edit predictions as you type or manually by triggering `editor::ShowEditPrediction`.
3381- Setting: `show_edit_predictions`
3382- Default: `true`
3383
3384**Options**
3385
3386`boolean` values
3387
3388## Show Whitespaces
3389
3390- Description: Whether or not to render whitespace characters in the editor.
3391- Setting: `show_whitespaces`
3392- Default: `selection`
3393
3394**Options**
3395
33961. `all`
33972. `selection`
33983. `none`
33994. `boundary`
3400
3401## Whitespace Map
3402
3403- Description: Specify the characters used to render whitespace when show_whitespaces is enabled.
3404- Setting: `whitespace_map`
3405- Default:
3406
3407```json [settings]
3408{
3409  "whitespace_map": {
3410    "space": "•",
3411    "tab": "→"
3412  }
3413}
3414```
3415
3416## Soft Wrap
3417
3418- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
3419- Setting: `soft_wrap`
3420- Default: `none`
3421
3422**Options**
3423
34241. `none` to avoid wrapping generally, unless the line is too long
34252. `prefer_line` (deprecated, same as `none`)
34263. `editor_width` to wrap lines that overflow the editor width
34274. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
34285. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
3429
3430## Show Wrap Guides
3431
3432- Description: Whether to show wrap guides (vertical rulers) in the editor. Setting this to true will show a guide at the 'preferred_line_length' value if 'soft_wrap' is set to 'preferred_line_length', and will show any additional guides as specified by the 'wrap_guides' setting.
3433- Setting: `show_wrap_guides`
3434- Default: `true`
3435
3436**Options**
3437
3438`boolean` values
3439
3440## Use On Type Format
3441
3442- Description: Whether to use additional LSP queries to format (and amend) the code after every "trigger" symbol input, defined by LSP server capabilities
3443- Setting: `use_on_type_format`
3444- Default: `true`
3445
3446**Options**
3447
3448`boolean` values
3449
3450## Use Auto Surround
3451
3452- Description: Whether to automatically surround selected text when typing opening parenthesis, bracket, brace, single or double quote characters. For example, when you select text and type '(', Zed will surround the text with ().
3453- Setting: `use_auto_surround`
3454- Default: `true`
3455
3456**Options**
3457
3458`boolean` values
3459
3460## Use System Path Prompts
3461
3462- Description: Whether to use the system provided dialogs for Open and Save As. When set to false, Zed will use the built-in keyboard-first pickers.
3463- Setting: `use_system_path_prompts`
3464- Default: `true`
3465
3466**Options**
3467
3468`boolean` values
3469
3470## Use System Prompts
3471
3472- Description: Whether to use the system provided dialogs for prompts, such as confirmation prompts. When set to false, Zed will use its built-in prompts. Note that on Linux, this option is ignored and Zed will always use the built-in prompts.
3473- Setting: `use_system_prompts`
3474- Default: `true`
3475
3476**Options**
3477
3478`boolean` values
3479
3480## Wrap Guides (Vertical Rulers)
3481
3482- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
3483- Setting: `wrap_guides`
3484- Default: []
3485
3486**Options**
3487
3488List of `integer` column numbers
3489
3490## Tab Size
3491
3492- Description: The number of spaces to use for each tab character.
3493- Setting: `tab_size`
3494- Default: `4`
3495
3496**Options**
3497
3498`integer` values
3499
3500## Tasks
3501
3502- Description: Configuration for tasks that can be run within Zed
3503- Setting: `tasks`
3504- Default:
3505
3506```json [settings]
3507{
3508  "tasks": {
3509    "variables": {},
3510    "enabled": true,
3511    "prefer_lsp": false
3512  }
3513}
3514```
3515
3516**Options**
3517
3518- `variables`: Custom variables for task configuration
3519- `enabled`: Whether tasks are enabled
3520- `prefer_lsp`: Whether to prefer LSP-provided tasks over Zed language extension ones
3521
3522## Telemetry
3523
3524- Description: Control what info is collected by Zed.
3525- Setting: `telemetry`
3526- Default:
3527
3528```json [settings]
3529"telemetry": {
3530  "diagnostics": true,
3531  "metrics": true
3532},
3533```
3534
3535**Options**
3536
3537### Diagnostics
3538
3539- Description: Setting for sending debug-related data, such as crash reports.
3540- Setting: `diagnostics`
3541- Default: `true`
3542
3543**Options**
3544
3545`boolean` values
3546
3547### Metrics
3548
3549- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
3550- Setting: `metrics`
3551- Default: `true`
3552
3553**Options**
3554
3555`boolean` values
3556
3557## Terminal
3558
3559- Description: Configuration for the terminal.
3560- Setting: `terminal`
3561- Default:
3562
3563```json [settings]
3564{
3565  "terminal": {
3566    "alternate_scroll": "off",
3567    "blinking": "terminal_controlled",
3568    "copy_on_select": false,
3569    "keep_selection_on_copy": true,
3570    "dock": "bottom",
3571    "default_width": 640,
3572    "default_height": 320,
3573    "detect_venv": {
3574      "on": {
3575        "directories": [".env", "env", ".venv", "venv"],
3576        "activate_script": "default"
3577      }
3578    },
3579    "env": {},
3580    "font_family": null,
3581    "font_features": null,
3582    "font_size": null,
3583    "line_height": "comfortable",
3584    "minimum_contrast": 45,
3585    "option_as_meta": false,
3586    "button": true,
3587    "shell": "system",
3588    "toolbar": {
3589      "breadcrumbs": false
3590    },
3591    "working_directory": "current_project_directory",
3592    "scrollbar": {
3593      "show": null
3594    }
3595  }
3596}
3597```
3598
3599### Terminal: Dock
3600
3601- Description: Control the position of the dock
3602- Setting: `dock`
3603- Default: `bottom`
3604
3605**Options**
3606
3607`"bottom"`, `"left"` or `"right"`
3608
3609### Terminal: Alternate Scroll
3610
3611- Description: Set whether Alternate Scroll mode (DECSET code: `?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.
3612- Setting: `alternate_scroll`
3613- Default: `off`
3614
3615**Options**
3616
36171. Default alternate scroll mode to off
3618
3619```json [settings]
3620{
3621  "terminal": {
3622    "alternate_scroll": "off"
3623  }
3624}
3625```
3626
36272. Default alternate scroll mode to on
3628
3629```json [settings]
3630{
3631  "terminal": {
3632    "alternate_scroll": "on"
3633  }
3634}
3635```
3636
3637### Terminal: Blinking
3638
3639- Description: Set the cursor blinking behavior in the terminal
3640- Setting: `blinking`
3641- Default: `terminal_controlled`
3642
3643**Options**
3644
36451. Never blink the cursor, ignore the terminal mode
3646
3647```json [settings]
3648{
3649  "terminal": {
3650    "blinking": "off"
3651  }
3652}
3653```
3654
36552. Default the cursor blink to off, but allow the terminal to turn blinking on
3656
3657```json [settings]
3658{
3659  "terminal": {
3660    "blinking": "terminal_controlled"
3661  }
3662}
3663```
3664
36653. Always blink the cursor, ignore the terminal mode
3666
3667```json [settings]
3668{
3669  "terminal": {
3670    "blinking": "on"
3671  }
3672}
3673```
3674
3675### Terminal: Copy On Select
3676
3677- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
3678- Setting: `copy_on_select`
3679- Default: `false`
3680
3681**Options**
3682
3683`boolean` values
3684
3685**Example**
3686
3687```json [settings]
3688{
3689  "terminal": {
3690    "copy_on_select": true
3691  }
3692}
3693```
3694
3695### Terminal: Cursor Shape
3696
3697- Description: Controls the visual shape of the cursor in the terminal. When not explicitly set, it defaults to a block shape.
3698- Setting: `cursor_shape`
3699- Default: `null` (defaults to block)
3700
3701**Options**
3702
37031. A block that surrounds the following character
3704
3705```json [settings]
3706{
3707  "terminal": {
3708    "cursor_shape": "block"
3709  }
3710}
3711```
3712
37132. A vertical bar
3714
3715```json [settings]
3716{
3717  "terminal": {
3718    "cursor_shape": "bar"
3719  }
3720}
3721```
3722
37233. An underline / underscore that runs along the following character
3724
3725```json [settings]
3726{
3727  "terminal": {
3728    "cursor_shape": "underline"
3729  }
3730}
3731```
3732
37334. A box drawn around the following character
3734
3735```json [settings]
3736{
3737  "terminal": {
3738    "cursor_shape": "hollow"
3739  }
3740}
3741```
3742
3743### Terminal: Keep Selection On Copy
3744
3745- Description: Whether or not to keep the selection in the terminal after copying text.
3746- Setting: `keep_selection_on_copy`
3747- Default: `true`
3748
3749**Options**
3750
3751`boolean` values
3752
3753**Example**
3754
3755```json [settings]
3756{
3757  "terminal": {
3758    "keep_selection_on_copy": false
3759  }
3760}
3761```
3762
3763### Terminal: Env
3764
3765- Description: Any key-value pairs added to this object will be added to the terminal's environment. Keys must be unique, use `:` to separate multiple values in a single variable
3766- Setting: `env`
3767- Default: `{}`
3768
3769**Example**
3770
3771```json [settings]
3772{
3773  "terminal": {
3774    "env": {
3775      "ZED": "1",
3776      "KEY": "value1:value2"
3777    }
3778  }
3779}
3780```
3781
3782### Terminal: Font Size
3783
3784- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
3785- Setting: `font_size`
3786- Default: `null`
3787
3788**Options**
3789
3790`integer` values
3791
3792```json [settings]
3793{
3794  "terminal": {
3795    "font_size": 15
3796  }
3797}
3798```
3799
3800### Terminal: Font Family
3801
3802- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
3803- Setting: `font_family`
3804- Default: `null`
3805
3806**Options**
3807
3808The name of any font family installed on the user's system
3809
3810```json [settings]
3811{
3812  "terminal": {
3813    "font_family": "Berkeley Mono"
3814  }
3815}
3816```
3817
3818### Terminal: Font Features
3819
3820- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
3821- Setting: `font_features`
3822- Default: `null`
3823- Platform: macOS and Windows.
3824
3825**Options**
3826
3827See Buffer Font Features
3828
3829```json [settings]
3830{
3831  "terminal": {
3832    "font_features": {
3833      "calt": false
3834      // See Buffer Font Features for more features
3835    }
3836  }
3837}
3838```
3839
3840### Terminal: Line Height
3841
3842- Description: Set the terminal's line height.
3843- Setting: `line_height`
3844- Default: `standard`
3845
3846**Options**
3847
38481. Use a line height that's `comfortable` for reading, 1.618.
3849
3850```json [settings]
3851{
3852  "terminal": {
3853    "line_height": "comfortable"
3854  }
3855}
3856```
3857
38582. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters. (default)
3859
3860```json [settings]
3861{
3862  "terminal": {
3863    "line_height": "standard"
3864  }
3865}
3866```
3867
38683.  Use a custom line height.
3869
3870```json [settings]
3871{
3872  "terminal": {
3873    "line_height": {
3874      "custom": 2
3875    }
3876  }
3877}
3878```
3879
3880### Terminal: Minimum Contrast
3881
3882- Description: Controls the minimum contrast between foreground and background colors in the terminal. Uses the APCA (Accessible Perceptual Contrast Algorithm) for color adjustments. Set this to 0 to disable this feature.
3883- Setting: `minimum_contrast`
3884- Default: `45`
3885
3886**Options**
3887
3888`integer` values from 0 to 106. Common recommended values:
3889
3890- `0`: No contrast adjustment
3891- `45`: Minimum for large fluent text (default)
3892- `60`: Minimum for other content text
3893- `75`: Minimum for body text
3894- `90`: Preferred for body text
3895
3896```json [settings]
3897{
3898  "terminal": {
3899    "minimum_contrast": 45
3900  }
3901}
3902```
3903
3904### Terminal: Option As Meta
3905
3906- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
3907- Setting: `option_as_meta`
3908- Default: `false`
3909
3910**Options**
3911
3912`boolean` values
3913
3914```json [settings]
3915{
3916  "terminal": {
3917    "option_as_meta": true
3918  }
3919}
3920```
3921
3922### Terminal: Shell
3923
3924- Description: What shell to use when launching the terminal.
3925- Setting: `shell`
3926- Default: `system`
3927
3928**Options**
3929
39301. Use the system's default terminal configuration (usually the `/etc/passwd` file).
3931
3932```json [settings]
3933{
3934  "terminal": {
3935    "shell": "system"
3936  }
3937}
3938```
3939
39402. A program to launch:
3941
3942```json [settings]
3943{
3944  "terminal": {
3945    "shell": {
3946      "program": "sh"
3947    }
3948  }
3949}
3950```
3951
39523. A program with arguments:
3953
3954```json [settings]
3955{
3956  "terminal": {
3957    "shell": {
3958      "with_arguments": {
3959        "program": "/bin/bash",
3960        "args": ["--login"]
3961      }
3962    }
3963  }
3964}
3965```
3966
3967## Terminal: Detect Virtual Environments {#terminal-detect_venv}
3968
3969- Description: Activate the [Python Virtual Environment](https://docs.python.org/3/library/venv.html), if one is found, in the terminal's working directory (as resolved by the working_directory and automatically activating the virtual environment.
3970- Setting: `detect_venv`
3971- Default:
3972
3973```json [settings]
3974{
3975  "terminal": {
3976    "detect_venv": {
3977      "on": {
3978        // Default directories to search for virtual environments, relative
3979        // to the current working directory. We recommend overriding this
3980        // in your project's settings, rather than globally.
3981        "directories": [".env", "env", ".venv", "venv"],
3982        // Can also be `csh`, `fish`, and `nushell`
3983        "activate_script": "default"
3984      }
3985    }
3986  }
3987}
3988```
3989
3990Disable with:
3991
3992```json [settings]
3993{
3994  "terminal": {
3995    "detect_venv": "off"
3996  }
3997}
3998```
3999
4000## Terminal: Toolbar
4001
4002- Description: Whether or not to show various elements in the terminal toolbar.
4003- Setting: `toolbar`
4004- Default:
4005
4006```json [settings]
4007{
4008  "terminal": {
4009    "toolbar": {
4010      "breadcrumbs": false
4011    }
4012  }
4013}
4014```
4015
4016**Options**
4017
4018At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
4019
4020If the terminal title is empty, the breadcrumbs won't be shown.
4021
4022The shell running in the terminal needs to be configured to emit the title.
4023
4024Example command to set the title: `echo -e "\e]2;New Title\007";`
4025
4026### Terminal: Button
4027
4028- Description: Control to show or hide the terminal button in the status bar
4029- Setting: `button`
4030- Default: `true`
4031
4032**Options**
4033
4034`boolean` values
4035
4036```json [settings]
4037{
4038  "terminal": {
4039    "button": false
4040  }
4041}
4042```
4043
4044### Terminal: Working Directory
4045
4046- Description: What working directory to use when launching the terminal.
4047- Setting: `working_directory`
4048- Default: `"current_project_directory"`
4049
4050**Options**
4051
40521. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
4053
4054```json [settings]
4055{
4056  "terminal": {
4057    "working_directory": "current_project_directory"
4058  }
4059}
4060```
4061
40622. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
4063
4064```json [settings]
4065{
4066  "terminal": {
4067    "working_directory": "first_project_directory"
4068  }
4069}
4070```
4071
40723. Always use this platform's home directory (if we can find it)
4073
4074```json [settings]
4075{
4076  "terminal": {
4077    "working_directory": "always_home"
4078  }
4079}
4080```
4081
40824. Always use a specific directory. This value will be shell expanded. If this path is not a valid directory the terminal will default to this platform's home directory.
4083
4084```json [settings]
4085{
4086  "terminal": {
4087    "working_directory": {
4088      "always": {
4089        "directory": "~/zed/projects/"
4090      }
4091    }
4092  }
4093}
4094```
4095
4096## REPL
4097
4098- Description: Repl settings.
4099- Setting: `repl`
4100- Default:
4101
4102```json [settings]
4103"repl": {
4104  // Maximum number of columns to keep in REPL's scrollback buffer.
4105  // Clamped with [20, 512] range.
4106  "max_columns": 128,
4107  // Maximum number of lines to keep in REPL's scrollback buffer.
4108  // Clamped with [4, 256] range.
4109  "max_lines": 32
4110},
4111```
4112
4113## Theme
4114
4115- Description: The theme setting can be specified in two forms - either as the name of a theme or as an object containing the `mode`, `dark`, and `light` themes for the Zed UI.
4116- Setting: `theme`
4117- Default: `One Dark`
4118
4119### Theme Object
4120
4121- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
4122- Setting: `theme`
4123- Default:
4124
4125```json [settings]
4126"theme": {
4127  "mode": "system",
4128  "dark": "One Dark",
4129  "light": "One Light"
4130},
4131```
4132
4133### Mode
4134
4135- Description: Specify theme mode.
4136- Setting: `mode`
4137- Default: `system`
4138
4139**Options**
4140
41411. Set the theme to dark mode
4142
4143```json [settings]
4144{
4145  "mode": "dark"
4146}
4147```
4148
41492. Set the theme to light mode
4150
4151```json [settings]
4152{
4153  "mode": "light"
4154}
4155```
4156
41573. Set the theme to system mode
4158
4159```json [settings]
4160{
4161  "mode": "system"
4162}
4163```
4164
4165### Dark
4166
4167- Description: The name of the dark Zed theme to use for the UI.
4168- Setting: `dark`
4169- Default: `One Dark`
4170
4171**Options**
4172
4173Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
4174
4175### Light
4176
4177- Description: The name of the light Zed theme to use for the UI.
4178- Setting: `light`
4179- Default: `One Light`
4180
4181**Options**
4182
4183Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
4184
4185## Title Bar
4186
4187- Description: Whether or not to show various elements in the title bar
4188- Setting: `title_bar`
4189- Default:
4190
4191```json [settings]
4192"title_bar": {
4193  "show_branch_icon": false,
4194  "show_branch_name": true,
4195  "show_project_items": true,
4196  "show_onboarding_banner": true,
4197  "show_user_picture": true,
4198  "show_sign_in": true,
4199  "show_menus": false
4200}
4201```
4202
4203**Options**
4204
4205- `show_branch_icon`: Whether to show the branch icon beside branch switcher in the titlebar
4206- `show_branch_name`: Whether to show the branch name button in the titlebar
4207- `show_project_items`: Whether to show the project host and name in the titlebar
4208- `show_onboarding_banner`: Whether to show onboarding banners in the titlebar
4209- `show_user_picture`: Whether to show user picture in the titlebar
4210- `show_sign_in`: Whether to show the sign in button in the titlebar
4211- `show_menus`: Whether to show the menus in the titlebar
4212
4213## Vim
4214
4215- Description: Whether or not to enable vim mode.
4216- Setting: `vim_mode`
4217- Default: `false`
4218
4219## When Closing With No Tabs
4220
4221- Description: Whether the window should be closed when using 'close active item' on a window with no tabs
4222- Setting: `when_closing_with_no_tabs`
4223- Default: `"platform_default"`
4224
4225**Options**
4226
42271. Use platform default behavior:
4228
4229```json [settings]
4230{
4231  "when_closing_with_no_tabs": "platform_default"
4232}
4233```
4234
42352. Always close the window:
4236
4237```json [settings]
4238{
4239  "when_closing_with_no_tabs": "close_window"
4240}
4241```
4242
42433. Never close the window:
4244
4245```json [settings]
4246{
4247  "when_closing_with_no_tabs": "keep_window_open"
4248}
4249```
4250
4251## Project Panel
4252
4253- Description: Customize project panel
4254- Setting: `project_panel`
4255- Default:
4256
4257```json [settings]
4258{
4259  "project_panel": {
4260    "button": true,
4261    "default_width": 240,
4262    "dock": "left",
4263    "entry_spacing": "comfortable",
4264    "file_icons": true,
4265    "folder_icons": true,
4266    "git_status": true,
4267    "indent_size": 20,
4268    "auto_reveal_entries": true,
4269    "auto_fold_dirs": true,
4270    "drag_and_drop": true,
4271    "scrollbar": {
4272      "show": null
4273    },
4274    "sticky_scroll": true,
4275    "show_diagnostics": "all",
4276    "indent_guides": {
4277      "show": "always"
4278    },
4279    "hide_root": false,
4280    "hide_hidden": false,
4281    "starts_open": true,
4282    "open_file_on_paste": true
4283  }
4284}
4285```
4286
4287### Dock
4288
4289- Description: Control the position of the dock
4290- Setting: `dock`
4291- Default: `left`
4292
4293**Options**
4294
42951. Default dock position to left
4296
4297```json [settings]
4298{
4299  "dock": "left"
4300}
4301```
4302
43032. Default dock position to right
4304
4305```json [settings]
4306{
4307  "dock": "right"
4308}
4309```
4310
4311### Entry Spacing
4312
4313- Description: Spacing between worktree entries
4314- Setting: `entry_spacing`
4315- Default: `comfortable`
4316
4317**Options**
4318
43191. Comfortable entry spacing
4320
4321```json [settings]
4322{
4323  "entry_spacing": "comfortable"
4324}
4325```
4326
43272. Standard entry spacing
4328
4329```json [settings]
4330{
4331  "entry_spacing": "standard"
4332}
4333```
4334
4335### Git Status
4336
4337- Description: Indicates newly created and updated files
4338- Setting: `git_status`
4339- Default: `true`
4340
4341**Options**
4342
43431. Default enable git status
4344
4345```json [settings]
4346{
4347  "git_status": true
4348}
4349```
4350
43512. Default disable git status
4352
4353```json [settings]
4354{
4355  "git_status": false
4356}
4357```
4358
4359### Default Width
4360
4361- Description: Customize default width taken by project panel
4362- Setting: `default_width`
4363- Default: `240`
4364
4365**Options**
4366
4367`float` values
4368
4369### Auto Reveal Entries
4370
4371- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
4372- Setting: `auto_reveal_entries`
4373- Default: `true`
4374
4375**Options**
4376
43771. Enable auto reveal entries
4378
4379```json [settings]
4380{
4381  "auto_reveal_entries": true
4382}
4383```
4384
43852. Disable auto reveal entries
4386
4387```json [settings]
4388{
4389  "auto_reveal_entries": false
4390}
4391```
4392
4393### Auto Fold Dirs
4394
4395- Description: Whether to fold directories automatically when directory has only one directory inside.
4396- Setting: `auto_fold_dirs`
4397- Default: `true`
4398
4399**Options**
4400
44011. Enable auto fold dirs
4402
4403```json [settings]
4404{
4405  "auto_fold_dirs": true
4406}
4407```
4408
44092. Disable auto fold dirs
4410
4411```json [settings]
4412{
4413  "auto_fold_dirs": false
4414}
4415```
4416
4417### Indent Size
4418
4419- Description: Amount of indentation (in pixels) for nested items.
4420- Setting: `indent_size`
4421- Default: `20`
4422
4423### Indent Guides: Show
4424
4425- Description: Whether to show indent guides in the project panel.
4426- Setting: `indent_guides`
4427- Default:
4428
4429```json [settings]
4430"indent_guides": {
4431  "show": "always"
4432}
4433```
4434
4435**Options**
4436
44371. Show indent guides in the project panel
4438
4439```json [settings]
4440{
4441  "indent_guides": {
4442    "show": "always"
4443  }
4444}
4445```
4446
44472. Hide indent guides in the project panel
4448
4449```json [settings]
4450{
4451  "indent_guides": {
4452    "show": "never"
4453  }
4454}
4455```
4456
4457### Scrollbar: Show
4458
4459- Description: 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.
4460- Setting: `scrollbar`
4461- Default:
4462
4463```json [settings]
4464"scrollbar": {
4465  "show": null
4466}
4467```
4468
4469**Options**
4470
44711. Show scrollbar in the project panel
4472
4473```json [settings]
4474{
4475  "scrollbar": {
4476    "show": "always"
4477  }
4478}
4479```
4480
44812. Hide scrollbar in the project panel
4482
4483```json [settings]
4484{
4485  "scrollbar": {
4486    "show": "never"
4487  }
4488}
4489```
4490
4491## Agent
4492
4493Visit [the Configuration page](./ai/configuration.md) under the AI section to learn more about all the agent-related settings.
4494
4495## Collaboration Panel
4496
4497- Description: Customizations for the collaboration panel.
4498- Setting: `collaboration_panel`
4499- Default:
4500
4501```json [settings]
4502{
4503  "collaboration_panel": {
4504    "button": true,
4505    "dock": "left",
4506    "default_width": 240
4507  }
4508}
4509```
4510
4511**Options**
4512
4513- `button`: Whether to show the collaboration panel button in the status bar
4514- `dock`: Where to dock the collaboration panel. Can be `left` or `right`
4515- `default_width`: Default width of the collaboration panel
4516
4517## Debugger
4518
4519- Description: Configuration for debugger panel and settings
4520- Setting: `debugger`
4521- Default:
4522
4523```json [settings]
4524{
4525  "debugger": {
4526    "stepping_granularity": "line",
4527    "save_breakpoints": true,
4528    "dock": "bottom",
4529    "button": true
4530  }
4531}
4532```
4533
4534See the [debugger page](./debugger.md) for more information about debugging support within Zed.
4535
4536## Git Panel
4537
4538- Description: Setting to customize the behavior of the git panel.
4539- Setting: `git_panel`
4540- Default:
4541
4542```json [settings]
4543{
4544  "git_panel": {
4545    "button": true,
4546    "dock": "left",
4547    "default_width": 360,
4548    "status_style": "icon",
4549    "fallback_branch_name": "main",
4550    "sort_by_path": false,
4551    "collapse_untracked_diff": false,
4552    "scrollbar": {
4553      "show": null
4554    }
4555  }
4556}
4557```
4558
4559**Options**
4560
4561- `button`: Whether to show the git panel button in the status bar
4562- `dock`: Where to dock the git panel. Can be `left` or `right`
4563- `default_width`: Default width of the git panel
4564- `status_style`: How to display git status. Can be `label_color` or `icon`
4565- `fallback_branch_name`: What branch name to use if `init.defaultBranch` is not set
4566- `sort_by_path`: Whether to sort entries in the panel by path or by status (the default)
4567- `collapse_untracked_diff`: Whether to collapse untracked files in the diff panel
4568- `scrollbar`: When to show the scrollbar in the git panel
4569
4570## Outline Panel
4571
4572- Description: Customize outline Panel
4573- Setting: `outline_panel`
4574- Default:
4575
4576```json [settings]
4577"outline_panel": {
4578  "button": true,
4579  "default_width": 300,
4580  "dock": "left",
4581  "file_icons": true,
4582  "folder_icons": true,
4583  "git_status": true,
4584  "indent_size": 20,
4585  "auto_reveal_entries": true,
4586  "auto_fold_dirs": true,
4587  "indent_guides": {
4588    "show": "always"
4589  },
4590  "scrollbar": {
4591    "show": null
4592  }
4593}
4594```
4595
4596## Calls
4597
4598- Description: Customize behavior when participating in a call
4599- Setting: `calls`
4600- Default:
4601
4602```json [settings]
4603"calls": {
4604  // Join calls with the microphone live by default
4605  "mute_on_join": false,
4606  // Share your project when you are the first to join a channel
4607  "share_on_join": false
4608},
4609```
4610
4611## Unnecessary Code Fade
4612
4613- Description: How much to fade out unused code.
4614- Setting: `unnecessary_code_fade`
4615- Default: `0.3`
4616
4617**Options**
4618
4619Float values between `0.0` and `0.9`, where:
4620
4621- `0.0` means no fading (unused code looks the same as used code)
4622- `0.9` means maximum fading (unused code is very faint but still visible)
4623
4624**Example**
4625
4626```json [settings]
4627{
4628  "unnecessary_code_fade": 0.5
4629}
4630```
4631
4632## UI Font Family
4633
4634- Description: The name of the font to use for text in the UI.
4635- Setting: `ui_font_family`
4636- Default: `.ZedSans`. This currently aliases to [IBM Plex](https://www.ibm.com/plex/).
4637
4638**Options**
4639
4640The 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).
4641
4642## UI Font Features
4643
4644- Description: The OpenType features to enable for text in the UI.
4645- Setting: `ui_font_features`
4646- Default:
4647
4648```json [settings]
4649"ui_font_features": {
4650  "calt": false
4651}
4652```
4653
4654- Platform: macOS and Windows.
4655
4656**Options**
4657
4658Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
4659
4660For example, to disable font ligatures, add the following to your settings:
4661
4662```json [settings]
4663{
4664  "ui_font_features": {
4665    "calt": false
4666  }
4667}
4668```
4669
4670You can also set other OpenType features, like setting `cv01` to `7`:
4671
4672```json [settings]
4673{
4674  "ui_font_features": {
4675    "cv01": 7
4676  }
4677}
4678```
4679
4680## UI Font Fallbacks
4681
4682- Description: The font fallbacks to use for text in the UI.
4683- Setting: `ui_font_fallbacks`
4684- Default: `null`
4685- Platform: macOS and Windows.
4686
4687**Options**
4688
4689For example, to use `Nerd Font` as a fallback, add the following to your settings:
4690
4691```json [settings]
4692{
4693  "ui_font_fallbacks": ["Nerd Font"]
4694}
4695```
4696
4697## UI Font Size
4698
4699- Description: The default font size for text in the UI.
4700- Setting: `ui_font_size`
4701- Default: `16`
4702
4703**Options**
4704
4705`integer` values from `6` to `100` pixels (inclusive)
4706
4707## UI Font Weight
4708
4709- Description: The default font weight for text in the UI.
4710- Setting: `ui_font_weight`
4711- Default: `400`
4712
4713**Options**
4714
4715`integer` values between `100` and `900`
4716
4717## Settings Profiles
4718
4719- Description: Configure any number of settings profiles that are temporarily applied on top of your existing user settings when selected from `settings profile selector: toggle`.
4720- Setting: `profiles`
4721- Default: `{}`
4722
4723In your `settings.json` file, add the `profiles` object.
4724Each 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.
4725
4726Example:
4727
4728```json [settings]
4729"profiles": {
4730  "Presenting (Dark)": {
4731    "agent_buffer_font_size": 18.0,
4732    "buffer_font_size": 18.0,
4733    "theme": "One Dark",
4734    "ui_font_size": 18.0
4735  },
4736  "Presenting (Light)": {
4737    "agent_buffer_font_size": 18.0,
4738    "buffer_font_size": 18.0,
4739    "theme": "One Light",
4740    "ui_font_size": 18.0
4741  },
4742  "Writing": {
4743    "agent_buffer_font_size": 15.0,
4744    "buffer_font_size": 15.0,
4745    "theme": "Catppuccin Frappé - No Italics",
4746    "ui_font_size": 15.0,
4747    "tab_bar": { "show": false },
4748    "toolbar": { "breadcrumbs": false }
4749  }
4750}
4751```
4752
4753To preview and enable a settings profile, open the command palette via {#kb command_palette::Toggle} and search for `settings profile selector: toggle`.
4754
4755## An example configuration:
4756
4757```json [settings]
4758// ~/.config/zed/settings.json
4759{
4760  "theme": "cave-light",
4761  "tab_size": 2,
4762  "preferred_line_length": 80,
4763  "soft_wrap": "none",
4764
4765  "buffer_font_size": 18,
4766  "buffer_font_family": ".ZedMono",
4767
4768  "autosave": "on_focus_change",
4769  "format_on_save": "off",
4770  "vim_mode": false,
4771  "projects_online_by_default": true,
4772  "terminal": {
4773    "font_family": "FiraCode Nerd Font Mono",
4774    "blinking": "off"
4775  },
4776  "languages": {
4777    "C": {
4778      "format_on_save": "on",
4779      "formatter": "language_server",
4780      "preferred_line_length": 64,
4781      "soft_wrap": "preferred_line_length"
4782    }
4783  }
4784}
4785```