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