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 files
   8
   9<!--
  10TBD: Settings files. Rewrite with "remote settings" in mind (e.g. `local settings` on the remote host).
  11Consider renaming `zed: Open Local Settings` to `zed: Open Project Settings`.
  12
  13TBD: 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.
  14-->
  15
  16Your settings file can be opened with {#kb zed::OpenSettings}. By 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.
  17
  18This configuration is merged with any local configuration inside your projects. You can open the project settings by running {#action zed::OpenProjectSettings} from the command palette. This will create a `.zed` directory containing`.zed/settings.json`.
  19
  20Although most projects will only need one settings file at the root, you can add more local settings files for subdirectories as needed. Not all settings can be set in local files, just those that impact the behavior of the editor and language tooling. For example you can set `tab_size`, `formatter` etc. but not `theme`, `vim_mode` and similar.
  21
  22The syntax for configuration files is a super-set of JSON that allows `//` comments.
  23
  24## Default settings
  25
  26You can find the default settings for your current Zed by running {#action zed::OpenDefaultSettings} from the command palette.
  27
  28Extensions that provide language servers may also provide default settings for those language servers.
  29
  30# Settings
  31
  32## Active Pane Modifiers
  33
  34- Description: Styling settings applied to the active pane.
  35- Setting: `active_pane_modifiers`
  36- Default:
  37
  38```json
  39{
  40  "active_pane_modifiers": {
  41    "magnification": 1.0,
  42    "border_size": 0.0,
  43    "inactive_opacity": 1.0
  44  }
  45}
  46```
  47
  48### Magnification
  49
  50- Description: Scale by which to zoom the active pane. When set to `1.0`, the active pane has the same size as others, but when set to a larger value, the active pane takes up more space.
  51- Setting: `magnification`
  52- Default: `1.0`
  53
  54**Options**
  55
  56`float` values
  57
  58### Border size
  59
  60- 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.
  61- Setting: `border_size`
  62- Default: `0.0`
  63
  64**Options**
  65
  66Non-negative `float` values
  67
  68### Inactive Opacity
  69
  70- 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.
  71- Setting: `inactive_opacity`
  72- Default: `1.0`
  73
  74**Options**
  75
  76`float` values
  77
  78## Bottom Dock Layout
  79
  80- Description: Control the layout of the bottom dock, relative to the left and right docks
  81- Setting: `bottom_dock_layout`
  82- Default: `"contained"`
  83
  84**Options**
  85
  861. Contain the bottom dock, giving the full height of the window to the left and right docks
  87
  88```json
  89{
  90  "bottom_dock_layout": "contained"
  91}
  92```
  93
  942. Give the bottom dock the full width of the window, truncating the left and right docks
  95
  96```json
  97{
  98  "bottom_dock_layout": "full"
  99}
 100```
 101
 1023. Left align the bottom dock, truncating the left dock and giving the right dock the full height of the window
 103
 104```json
 105{
 106  "bottom_dock_layout": "left_aligned"
 107}
 108```
 109
 1103. Right align the bottom dock, giving the left dock the full height of the window and truncating the right dock.
 111
 112```json
 113{
 114  "bottom_dock_layout": "right_aligned"
 115}
 116```
 117
 118## Auto Install extensions
 119
 120- Description: Define extensions to be autoinstalled or never be installed.
 121- Setting: `auto_install_extension`
 122- Default: `{ "html": true }`
 123
 124**Options**
 125
 126You can find the names of your currently installed extensions by listing the subfolders under the [extension installation location](./extensions/installing-extensions#installation-location):
 127
 128On MacOS:
 129
 130```sh
 131ls ~/Library/Application\ Support/Zed/extensions/installed/
 132```
 133
 134On Linux:
 135
 136```sh
 137ls ~/.local/share/zed/extensions/installed
 138```
 139
 140Define extensions which should be installed (`true`) or never installed (`false`).
 141
 142```json
 143{
 144  "auto_install_extensions": {
 145    "html": true,
 146    "dockerfile": true,
 147    "docker-compose": false
 148  }
 149}
 150```
 151
 152## Autosave
 153
 154- Description: When to automatically save edited buffers.
 155- Setting: `autosave`
 156- Default: `off`
 157
 158**Options**
 159
 1601. To disable autosave, set it to `off`:
 161
 162```json
 163{
 164  "autosave": "off"
 165}
 166```
 167
 1682. To autosave when focus changes, use `on_focus_change`:
 169
 170```json
 171{
 172  "autosave": "on_focus_change"
 173}
 174```
 175
 1763. To autosave when the active window changes, use `on_window_change`:
 177
 178```json
 179{
 180  "autosave": "on_window_change"
 181}
 182```
 183
 1844. To autosave after an inactivity period, use `after_delay`:
 185
 186```json
 187{
 188  "autosave": {
 189    "after_delay": {
 190      "milliseconds": 1000
 191    }
 192  }
 193}
 194```
 195
 196## Restore on Startup
 197
 198- Description: Controls session restoration on startup.
 199- Setting: `restore_on_startup`
 200- Default: `last_session`
 201
 202**Options**
 203
 2041. Restore all workspaces that were open when quitting Zed:
 205
 206```json
 207{
 208  "restore_on_startup": "last_session"
 209}
 210```
 211
 2122. Restore the workspace that was closed last:
 213
 214```json
 215{
 216  "restore_on_startup": "last_workspace"
 217}
 218```
 219
 2203. Always start with an empty editor:
 221
 222```json
 223{
 224  "restore_on_startup": "none"
 225}
 226```
 227
 228## Autoscroll on Clicks
 229
 230- Description: Whether to scroll when clicking near the edge of the visible text area.
 231- Setting: `autoscroll_on_clicks`
 232- Default: `false`
 233
 234**Options**
 235
 236`boolean` values
 237
 238## Auto Update
 239
 240- Description: Whether or not to automatically check for updates.
 241- Setting: `auto_update`
 242- Default: `true`
 243
 244**Options**
 245
 246`boolean` values
 247
 248## Base Keymap
 249
 250- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
 251- Setting: `base_keymap`
 252- Default: `VSCode`
 253
 254**Options**
 255
 2561. VSCode
 257
 258```json
 259{
 260  "base_keymap": "VSCode"
 261}
 262```
 263
 2642. Atom
 265
 266```json
 267{
 268  "base_keymap": "Atom"
 269}
 270```
 271
 2723. JetBrains
 273
 274```json
 275{
 276  "base_keymap": "JetBrains"
 277}
 278```
 279
 2804. None
 281
 282```json
 283{
 284  "base_keymap": "None"
 285}
 286```
 287
 2885. SublimeText
 289
 290```json
 291{
 292  "base_keymap": "SublimeText"
 293}
 294```
 295
 2966. TextMate
 297
 298```json
 299{
 300  "base_keymap": "TextMate"
 301}
 302```
 303
 304## Buffer Font Family
 305
 306- Description: The name of a font to use for rendering text in the editor.
 307- Setting: `buffer_font_family`
 308- Default: `Zed Plex Mono`
 309
 310**Options**
 311
 312The name of any font family installed on the user's system
 313
 314## Buffer Font Features
 315
 316- Description: The OpenType features to enable for text in the editor.
 317- Setting: `buffer_font_features`
 318- Default: `null`
 319- Platform: macOS and Windows.
 320
 321**Options**
 322
 323Zed 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.
 324
 325For example, to disable font ligatures, add the following to your settings:
 326
 327```json
 328{
 329  "buffer_font_features": {
 330    "calt": false
 331  }
 332}
 333```
 334
 335You can also set other OpenType features, like setting `cv01` to `7`:
 336
 337```json
 338{
 339  "buffer_font_features": {
 340    "cv01": 7
 341  }
 342}
 343```
 344
 345## Buffer Font Fallbacks
 346
 347- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
 348- Setting: `buffer_font_fallbacks`
 349- Default: `null`
 350- Platform: macOS and Windows.
 351
 352**Options**
 353
 354For example, to use `Nerd Font` as a fallback, add the following to your settings:
 355
 356```json
 357{
 358  "buffer_font_fallbacks": ["Nerd Font"]
 359}
 360```
 361
 362## Buffer Font Size
 363
 364- Description: The default font size for text in the editor.
 365- Setting: `buffer_font_size`
 366- Default: `15`
 367
 368**Options**
 369
 370`integer` values from `6` to `100` pixels (inclusive)
 371
 372## Buffer Font Weight
 373
 374- Description: The default font weight for text in the editor.
 375- Setting: `buffer_font_weight`
 376- Default: `400`
 377
 378**Options**
 379
 380`integer` values between `100` and `900`
 381
 382## Buffer Line Height
 383
 384- Description: The default line height for text in the editor.
 385- Setting: `buffer_line_height`
 386- Default: `"comfortable"`
 387
 388**Options**
 389
 390`"standard"`, `"comfortable"` or `{ "custom": float }` (`1` is compact, `2` is loose)
 391
 392## Confirm Quit
 393
 394- Description: Whether or not to prompt the user to confirm before closing the application.
 395- Setting: `confirm_quit`
 396- Default: `false`
 397
 398**Options**
 399
 400`boolean` values
 401
 402## Centered Layout
 403
 404- Description: Configuration for the centered layout mode.
 405- Setting: `centered_layout`
 406- Default:
 407
 408```json
 409"centered_layout": {
 410  "left_padding": 0.2,
 411  "right_padding": 0.2,
 412}
 413```
 414
 415**Options**
 416
 417The `left_padding` and `right_padding` options define the relative width of the
 418left 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`.
 419
 420## Direnv Integration
 421
 422- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
 423  `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.
 424  It also allows for those environment variables to be used in tasks.
 425- Setting: `load_direnv`
 426- Default: `"direct"`
 427
 428**Options**
 429
 430There are two options to choose from:
 431
 4321. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
 4332. `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.
 434
 435## Edit Predictions
 436
 437- Description: Settings for edit predictions.
 438- Setting: `edit_predictions`
 439- Default:
 440
 441```json
 442  "edit_predictions": {
 443    "disabled_globs": [
 444      "**/.env*",
 445      "**/*.pem",
 446      "**/*.key",
 447      "**/*.cert",
 448      "**/*.crt",
 449      "**/.dev.vars",
 450      "**/secrets.yml"
 451    ]
 452  }
 453```
 454
 455**Options**
 456
 457### Disabled Globs
 458
 459- 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.
 460- Setting: `disabled_globs`
 461- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/.dev.vars", "**/secrets.yml"]`
 462
 463**Options**
 464
 465List of `string` values.
 466
 467## Edit Predictions Disabled in
 468
 469- Description: A list of language scopes in which edit predictions should be disabled.
 470- Setting: `edit_predictions_disabled_in`
 471- Default: `[]`
 472
 473**Options**
 474
 475List of `string` values
 476
 4771. Don't show edit predictions in comments:
 478
 479```json
 480"disabled_in": ["comment"]
 481```
 482
 4832. Don't show edit predictions in strings and comments:
 484
 485```json
 486"disabled_in": ["comment", "string"]
 487```
 488
 4893. Only in Go, don't show edit predictions in strings and comments:
 490
 491```json
 492{
 493  "languages": {
 494    "Go": {
 495      "edit_predictions_disabled_in": ["comment", "string"]
 496    }
 497  }
 498}
 499```
 500
 501## Current Line Highlight
 502
 503- Description: How to highlight the current line in the editor.
 504- Setting: `current_line_highlight`
 505- Default: `all`
 506
 507**Options**
 508
 5091. Don't highlight the current line:
 510
 511```json
 512"current_line_highlight": "none"
 513```
 514
 5152. Highlight the gutter area:
 516
 517```json
 518"current_line_highlight": "gutter"
 519```
 520
 5213. Highlight the editor area:
 522
 523```json
 524"current_line_highlight": "line"
 525```
 526
 5274. Highlight the full line:
 528
 529```json
 530"current_line_highlight": "all"
 531```
 532
 533## Selection Highlight
 534
 535- Description: Whether to highlight all occurrences of the selected text in an editor.
 536- Setting: `selection_highlight`
 537- Default: `true`
 538
 539## LSP Highlight Debounce
 540
 541- Description: The debounce delay before querying highlights from the language server based on the current cursor location.
 542- Setting: `lsp_highlight_debounce`
 543- Default: `75`
 544
 545## Cursor Blink
 546
 547- Description: Whether or not the cursor blinks.
 548- Setting: `cursor_blink`
 549- Default: `true`
 550
 551**Options**
 552
 553`boolean` values
 554
 555## Cursor Shape
 556
 557- Description: Cursor shape for the default editor.
 558- Setting: `cursor_shape`
 559- Default: `bar`
 560
 561**Options**
 562
 5631. A vertical bar:
 564
 565```json
 566"cursor_shape": "bar"
 567```
 568
 5692. A block that surrounds the following character:
 570
 571```json
 572"cursor_shape": "block"
 573```
 574
 5753. An underline / underscore that runs along the following character:
 576
 577```json
 578"cursor_shape": "underline"
 579```
 580
 5814. An box drawn around the following character:
 582
 583```json
 584"cursor_shape": "hollow"
 585```
 586
 587## Hide Mouse
 588
 589- Description: Determines when the mouse cursor should be hidden in an editor or input box.
 590- Setting: `hide_mouse`
 591- Default: `on_typing_and_movement`
 592
 593**Options**
 594
 5951. Never hide the mouse cursor:
 596
 597```json
 598"hide_mouse": "never"
 599```
 600
 6012. Hide only when typing:
 602
 603```json
 604"hide_mouse": "on_typing"
 605```
 606
 6073. Hide on both typing and cursor movement:
 608
 609```json
 610"hide_mouse": "on_typing_and_movement"
 611```
 612
 613## Snippet Sort Order
 614
 615- Description: Determines how snippets are sorted relative to other completion items.
 616- Setting: `snippet_sort_order`
 617- Default: `inline`
 618
 619**Options**
 620
 6211. Place snippets at the top of the completion list:
 622
 623```json
 624"snippet_sort_order": "top"
 625```
 626
 6272. Place snippets normally without any preference:
 628
 629```json
 630"snippet_sort_order": "inline"
 631```
 632
 6333. Place snippets at the bottom of the completion list:
 634
 635```json
 636"snippet_sort_order": "bottom"
 637```
 638
 639## Editor Scrollbar
 640
 641- Description: Whether or not to show the editor scrollbar and various elements in it.
 642- Setting: `scrollbar`
 643- Default:
 644
 645```json
 646"scrollbar": {
 647  "show": "auto",
 648  "cursors": true,
 649  "git_diff": true,
 650  "search_results": true,
 651  "selected_text": true,
 652  "selected_symbol": true,
 653  "diagnostics": "all",
 654  "axes": {
 655    "horizontal": true,
 656    "vertical": true,
 657  },
 658},
 659```
 660
 661### Show Mode
 662
 663- Description: When to show the editor scrollbar.
 664- Setting: `show`
 665- Default: `auto`
 666
 667**Options**
 668
 6691. Show the scrollbar if there's important information or follow the system's configured behavior:
 670
 671```json
 672"scrollbar": {
 673  "show": "auto"
 674}
 675```
 676
 6772. Match the system's configured behavior:
 678
 679```json
 680"scrollbar": {
 681  "show": "system"
 682}
 683```
 684
 6853. Always show the scrollbar:
 686
 687```json
 688"scrollbar": {
 689  "show": "always"
 690}
 691```
 692
 6934. Never show the scrollbar:
 694
 695```json
 696"scrollbar": {
 697  "show": "never"
 698}
 699```
 700
 701### Cursor Indicators
 702
 703- Description: Whether to show cursor positions in the scrollbar.
 704- Setting: `cursors`
 705- Default: `true`
 706
 707**Options**
 708
 709`boolean` values
 710
 711### Git Diff Indicators
 712
 713- Description: Whether to show git diff indicators in the scrollbar.
 714- Setting: `git_diff`
 715- Default: `true`
 716
 717**Options**
 718
 719`boolean` values
 720
 721### Search Results Indicators
 722
 723- Description: Whether to show buffer search results in the scrollbar.
 724- Setting: `search_results`
 725- Default: `true`
 726
 727**Options**
 728
 729`boolean` values
 730
 731### Selected Text Indicators
 732
 733- Description: Whether to show selected text occurrences in the scrollbar.
 734- Setting: `selected_text`
 735- Default: `true`
 736
 737**Options**
 738
 739`boolean` values
 740
 741### Selected Symbols Indicators
 742
 743- Description: Whether to show selected symbol occurrences in the scrollbar.
 744- Setting: `selected_symbol`
 745- Default: `true`
 746
 747**Options**
 748
 749`boolean` values
 750
 751### Diagnostics
 752
 753- Description: Which diagnostic indicators to show in the scrollbar.
 754- Setting: `diagnostics`
 755- Default: `all`
 756
 757**Options**
 758
 7591. Show all diagnostics:
 760
 761```json
 762{
 763  "diagnostics": "all"
 764}
 765```
 766
 7672. Do not show any diagnostics:
 768
 769```json
 770{
 771  "diagnostics": "none"
 772}
 773```
 774
 7753. Show only errors:
 776
 777```json
 778{
 779  "diagnostics": "error"
 780}
 781```
 782
 7834. Show only errors and warnings:
 784
 785```json
 786{
 787  "diagnostics": "warning"
 788}
 789```
 790
 7915. Show only errors, warnings, and information:
 792
 793```json
 794{
 795  "diagnostics": "information"
 796}
 797```
 798
 799### Axes
 800
 801- Description: Forcefully enable or disable the scrollbar for each axis
 802- Setting: `axes`
 803- Default:
 804
 805```json
 806"scrollbar": {
 807  "axes": {
 808    "horizontal": true,
 809    "vertical": true,
 810  },
 811}
 812```
 813
 814#### Horizontal
 815
 816- Description: When false, forcefully disables the horizontal scrollbar. Otherwise, obey other settings.
 817- Setting: `horizontal`
 818- Default: `true`
 819
 820**Options**
 821
 822`boolean` values
 823
 824#### Vertical
 825
 826- Description: When false, forcefully disables the vertical scrollbar. Otherwise, obey other settings.
 827- Setting: `vertical`
 828- Default: `true`
 829
 830**Options**
 831
 832`boolean` values
 833
 834## Minimap
 835
 836- Description: Settings related to the editor's minimap, which provides an overview of your document.
 837- Setting: `minimap`
 838- Default:
 839
 840```json
 841{
 842  "minimap": {
 843    "show": "never",
 844    "thumb": "always",
 845    "thumb_border": "left_open",
 846    "current_line_highlight": null
 847  }
 848}
 849```
 850
 851### Show Mode
 852
 853- Description: When to show the minimap in the editor.
 854- Setting: `show`
 855- Default: `never`
 856
 857**Options**
 858
 8591. Always show the minimap:
 860
 861```json
 862{
 863  "show": "always"
 864}
 865```
 866
 8672. Show the minimap if the editor's scrollbars are visible:
 868
 869```json
 870{
 871  "show": "auto"
 872}
 873```
 874
 8753. Never show the minimap:
 876
 877```json
 878{
 879  "show": "never"
 880}
 881```
 882
 883### Thumb Display
 884
 885- Description: When to show the minimap thumb (the visible editor area) in the minimap.
 886- Setting: `thumb`
 887- Default: `always`
 888
 889**Options**
 890
 8911. Show the minimap thumb when hovering over the minimap:
 892
 893```json
 894{
 895  "thumb": "hover"
 896}
 897```
 898
 8992. Always show the minimap thumb:
 900
 901```json
 902{
 903  "thumb": "always"
 904}
 905```
 906
 907### Thumb Border
 908
 909- Description: How the minimap thumb border should look.
 910- Setting: `thumb_border`
 911- Default: `left_open`
 912
 913**Options**
 914
 9151. Display a border on all sides of the thumb:
 916
 917```json
 918{
 919  "thumb_border": "full"
 920}
 921```
 922
 9232. Display a border on all sides except the left side:
 924
 925```json
 926{
 927  "thumb_border": "left_open"
 928}
 929```
 930
 9313. Display a border on all sides except the right side:
 932
 933```json
 934{
 935  "thumb_border": "right_open"
 936}
 937```
 938
 9394. Display a border only on the left side:
 940
 941```json
 942{
 943  "thumb_border": "left_only"
 944}
 945```
 946
 9475. Display the thumb without any border:
 948
 949```json
 950{
 951  "thumb_border": "none"
 952}
 953```
 954
 955### Current Line Highlight
 956
 957- Description: How to highlight the current line in the minimap.
 958- Setting: `current_line_highlight`
 959- Default: `null`
 960
 961**Options**
 962
 9631. Inherit the editor's current line highlight setting:
 964
 965```json
 966{
 967  "minimap": {
 968    "current_line_highlight": null
 969  }
 970}
 971```
 972
 9732. Highlight the current line in the minimap:
 974
 975```json
 976{
 977  "minimap": {
 978    "current_line_highlight": "line"
 979  }
 980}
 981```
 982
 983or
 984
 985```json
 986{
 987  "minimap": {
 988    "current_line_highlight": "all"
 989  }
 990}
 991```
 992
 9933. Do not highlight the current line in the minimap:
 994
 995```json
 996{
 997  "minimap": {
 998    "current_line_highlight": "gutter"
 999  }
1000}
1001```
1002
1003or
1004
1005```json
1006{
1007  "minimap": {
1008    "current_line_highlight": "none"
1009  }
1010}
1011```
1012
1013## Editor Tab Bar
1014
1015- Description: Settings related to the editor's tab bar.
1016- Settings: `tab_bar`
1017- Default:
1018
1019```json
1020"tab_bar": {
1021  "show": true,
1022  "show_nav_history_buttons": true,
1023  "show_tab_bar_buttons": true
1024}
1025```
1026
1027### Show
1028
1029- Description: Whether or not to show the tab bar in the editor.
1030- Setting: `show`
1031- Default: `true`
1032
1033**Options**
1034
1035`boolean` values
1036
1037### Navigation History Buttons
1038
1039- Description: Whether or not to show the navigation history buttons.
1040- Setting: `show_nav_history_buttons`
1041- Default: `true`
1042
1043**Options**
1044
1045`boolean` values
1046
1047### Tab Bar Buttons
1048
1049- Description: Whether or not to show the tab bar buttons.
1050- Setting: `show_tab_bar_buttons`
1051- Default: `true`
1052
1053**Options**
1054
1055`boolean` values
1056
1057## Editor Tabs
1058
1059- Description: Configuration for the editor tabs.
1060- Setting: `tabs`
1061- Default:
1062
1063```json
1064"tabs": {
1065  "close_position": "right",
1066  "file_icons": false,
1067  "git_status": false,
1068  "activate_on_close": "history",
1069  "show_close_button": "hover",
1070  "show_diagnostics": "off"
1071},
1072```
1073
1074### Close Position
1075
1076- Description: Where to display close button within a tab.
1077- Setting: `close_position`
1078- Default: `right`
1079
1080**Options**
1081
10821. Display the close button on the right:
1083
1084```json
1085{
1086  "close_position": "right"
1087}
1088```
1089
10902. Display the close button on the left:
1091
1092```json
1093{
1094  "close_position": "left"
1095}
1096```
1097
1098### File Icons
1099
1100- Description: Whether to show the file icon for a tab.
1101- Setting: `file_icons`
1102- Default: `false`
1103
1104### Git Status
1105
1106- Description: Whether or not to show Git file status in tab.
1107- Setting: `git_status`
1108- Default: `false`
1109
1110### Activate on close
1111
1112- Description: What to do after closing the current tab.
1113- Setting: `activate_on_close`
1114- Default: `history`
1115
1116**Options**
1117
11181.  Activate the tab that was open previously:
1119
1120```json
1121{
1122  "activate_on_close": "history"
1123}
1124```
1125
11262. Activate the right neighbour tab if present:
1127
1128```json
1129{
1130  "activate_on_close": "neighbour"
1131}
1132```
1133
11343. Activate the left neighbour tab if present:
1135
1136```json
1137{
1138  "activate_on_close": "left_neighbour"
1139}
1140```
1141
1142### Show close button
1143
1144- Description: Controls the appearance behavior of the tab's close button.
1145- Setting: `show_close_button`
1146- Default: `hover`
1147
1148**Options**
1149
11501.  Show it just upon hovering the tab:
1151
1152```json
1153{
1154  "show_close_button": "hover"
1155}
1156```
1157
11582. Show it persistently:
1159
1160```json
1161{
1162  "show_close_button": "always"
1163}
1164```
1165
11663. Never show it, even if hovering it:
1167
1168```json
1169{
1170  "show_close_button": "hidden"
1171}
1172```
1173
1174### Show Diagnostics
1175
1176- 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.
1177- Setting: `show_diagnostics`
1178- Default: `off`
1179
1180**Options**
1181
11821. Do not mark any files:
1183
1184```json
1185{
1186  "show_diagnostics": "off"
1187}
1188```
1189
11902. Only mark files with errors:
1191
1192```json
1193{
1194  "show_diagnostics": "errors"
1195}
1196```
1197
11983. Mark files with errors and warnings:
1199
1200```json
1201{
1202  "show_diagnostics": "all"
1203}
1204```
1205
1206### Show Inline Code Actions
1207
1208- Description: Whether to show code action button at start of buffer line.
1209- Setting: `inline_code_actions`
1210- Default: `true`
1211
1212**Options**
1213
1214`boolean` values
1215
1216## Editor Toolbar
1217
1218- Description: Whether or not to show various elements in the editor toolbar.
1219- Setting: `toolbar`
1220- Default:
1221
1222```json
1223"toolbar": {
1224  "breadcrumbs": true,
1225  "quick_actions": true,
1226  "selections_menu": true,
1227  "agent_review": true,
1228  "code_actions": false
1229},
1230```
1231
1232**Options**
1233
1234Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
1235
1236## Enable Language Server
1237
1238- Description: Whether or not to use language servers to provide code intelligence.
1239- Setting: `enable_language_server`
1240- Default: `true`
1241
1242**Options**
1243
1244`boolean` values
1245
1246## Ensure Final Newline On Save
1247
1248- Description: Removes any lines containing only whitespace at the end of the file and ensures just one newline at the end.
1249- Setting: `ensure_final_newline_on_save`
1250- Default: `true`
1251
1252**Options**
1253
1254`boolean` values
1255
1256## LSP
1257
1258- Description: Configuration for language servers.
1259- Setting: `lsp`
1260- Default: `null`
1261
1262**Options**
1263
1264The following settings can be overridden for specific language servers:
1265
1266- `initialization_options`
1267- `settings`
1268
1269To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
1270
1271Some 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.
1272
1273For example to pass the `check` option to `rust-analyzer`, use the following configuration:
1274
1275```json
1276"lsp": {
1277  "rust-analyzer": {
1278    "initialization_options": {
1279      "check": {
1280        "command": "clippy" // rust-analyzer.check.command (default: "check")
1281      }
1282    }
1283  }
1284}
1285```
1286
1287While other options may be changed at a runtime and should be placed under `settings`:
1288
1289```json
1290"lsp": {
1291  "yaml-language-server": {
1292    "settings": {
1293      "yaml": {
1294        "keyOrdering": true // Enforces alphabetical ordering of keys in maps
1295      }
1296    }
1297  }
1298}
1299```
1300
1301## LSP Highlight Debounce
1302
1303- Description: The debounce delay in milliseconds before querying highlights from the language server based on the current cursor location.
1304- Setting: `lsp_highlight_debounce`
1305- Default: `75`
1306
1307**Options**
1308
1309`integer` values representing milliseconds
1310
1311## Format On Save
1312
1313- Description: Whether or not to perform a buffer format before saving.
1314- Setting: `format_on_save`
1315- Default: `on`
1316
1317**Options**
1318
13191. `on`, enables format on save obeying `formatter` setting:
1320
1321```json
1322{
1323  "format_on_save": "on"
1324}
1325```
1326
13272. `off`, disables format on save:
1328
1329```json
1330{
1331  "format_on_save": "off"
1332}
1333```
1334
1335## Formatter
1336
1337- Description: How to perform a buffer format.
1338- Setting: `formatter`
1339- Default: `auto`
1340
1341**Options**
1342
13431. To use the current language server, use `"language_server"`:
1344
1345```json
1346{
1347  "formatter": "language_server"
1348}
1349```
1350
13512. 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):
1352
1353```json
1354{
1355  "formatter": {
1356    "external": {
1357      "command": "sed",
1358      "arguments": ["-e", "s/ *$//"]
1359    }
1360  }
1361}
1362```
1363
13643. 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.
1365
1366WARNING: `{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.
1367
1368```json
1369  "formatter": {
1370    "external": {
1371      "command": "prettier",
1372      "arguments": ["--stdin-filepath", "{buffer_path}"]
1373    }
1374  }
1375```
1376
13774. Or to use code actions provided by the connected language servers, use `"code_actions"`:
1378
1379```json
1380{
1381  "formatter": {
1382    "code_actions": {
1383      // Use ESLint's --fix:
1384      "source.fixAll.eslint": true,
1385      // Organize imports on save:
1386      "source.organizeImports": true
1387    }
1388  }
1389}
1390```
1391
13925. Or to use multiple formatters consecutively, use an array of formatters:
1393
1394```json
1395{
1396  "formatter": [
1397    { "language_server": { "name": "rust-analyzer" } },
1398    {
1399      "external": {
1400        "command": "sed",
1401        "arguments": ["-e", "s/ *$//"]
1402      }
1403    }
1404  ]
1405}
1406```
1407
1408Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1409If any of the formatters fails, the subsequent ones will still be executed.
1410
1411## Code Actions On Format
1412
1413- Description: The code actions to perform with the primary language server when formatting the buffer.
1414- Setting: `code_actions_on_format`
1415- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
1416
1417**Examples**
1418
1419<!--
1420TBD: Add Python Ruff source.organizeImports example
1421-->
1422
14231. Organize imports on format in TypeScript and TSX buffers:
1424
1425```json
1426{
1427  "languages": {
1428    "TypeScript": {
1429      "code_actions_on_format": {
1430        "source.organizeImports": true
1431      }
1432    },
1433    "TSX": {
1434      "code_actions_on_format": {
1435        "source.organizeImports": true
1436      }
1437    }
1438  }
1439}
1440```
1441
14422. Run ESLint `fixAll` code action when formatting:
1443
1444```json
1445{
1446  "languages": {
1447    "JavaScript": {
1448      "code_actions_on_format": {
1449        "source.fixAll.eslint": true
1450      }
1451    }
1452  }
1453}
1454```
1455
14563. Run only a single ESLint rule when using `fixAll`:
1457
1458```json
1459{
1460  "languages": {
1461    "JavaScript": {
1462      "code_actions_on_format": {
1463        "source.fixAll.eslint": true
1464      }
1465    }
1466  },
1467  "lsp": {
1468    "eslint": {
1469      "settings": {
1470        "codeActionOnSave": {
1471          "rules": ["import/order"]
1472        }
1473      }
1474    }
1475  }
1476}
1477```
1478
1479## Auto close
1480
1481- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1482- Setting: `use_autoclose`
1483- Default: `true`
1484
1485**Options**
1486
1487`boolean` values
1488
1489## Always Treat Brackets As Autoclosed
1490
1491- Description: Controls how the editor handles the autoclosed characters.
1492- Setting: `always_treat_brackets_as_autoclosed`
1493- Default: `false`
1494
1495**Options**
1496
1497`boolean` values
1498
1499**Example**
1500
1501If the setting is set to `true`:
1502
15031. Enter in the editor: `)))`
15042. Move the cursor to the start: `^)))`
15053. Enter again: `)))`
1506
1507The result is still `)))` and not `))))))`, which is what it would be by default.
1508
1509## File Scan Exclusions
1510
1511- Setting: `file_scan_exclusions`
1512- 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`.
1513- Default:
1514
1515```json
1516"file_scan_exclusions": [
1517  "**/.git",
1518  "**/.svn",
1519  "**/.hg",
1520  "**/.jj",
1521  "**/CVS",
1522  "**/.DS_Store",
1523  "**/Thumbs.db",
1524  "**/.classpath",
1525  "**/.settings"
1526],
1527```
1528
1529Note, 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.
1530
1531## File Scan Inclusions
1532
1533- Setting: `file_scan_inclusions`
1534- 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.
1535- Default:
1536
1537```json
1538"file_scan_inclusions": [".env*"],
1539```
1540
1541## File Types
1542
1543- Setting: `file_types`
1544- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1545- Default:
1546
1547```json
1548"file_types": {
1549  "JSONC": ["**/.zed/**/*.json", "**/zed/**/*.json", "**/Zed/**/*.json", "**/.vscode/**/*.json"],
1550  "Shell Script": [".env.*"]
1551}
1552```
1553
1554**Examples**
1555
1556To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1557
1558```json
1559{
1560  "file_types": {
1561    "C++": ["c"],
1562    "TOML": ["MyLockFile"],
1563    "Dockerfile": ["Dockerfile*"]
1564  }
1565}
1566```
1567
1568## Diagnostics
1569
1570- Description: Configuration for diagnostics-related features.
1571- Setting: `diagnostics`
1572- Default:
1573
1574```json
1575{
1576  "diagnostics": {
1577    "include_warnings": true,
1578    "inline": {
1579      "enabled": false
1580    },
1581    "update_with_cursor": false,
1582    "primary_only": false,
1583    "use_rendered": false
1584  }
1585}
1586```
1587
1588### Inline Diagnostics
1589
1590- Description: Whether or not to show diagnostics information inline.
1591- Setting: `inline`
1592- Default:
1593
1594```json
1595{
1596  "diagnostics": {
1597    "inline": {
1598      "enabled": false,
1599      "update_debounce_ms": 150,
1600      "padding": 4,
1601      "min_column": 0,
1602      "max_severity": null
1603    }
1604  }
1605}
1606```
1607
1608**Options**
1609
16101. Enable inline diagnostics.
1611
1612```json
1613{
1614  "diagnostics": {
1615    "inline": {
1616      "enabled": true
1617    }
1618  }
1619}
1620```
1621
16222. Delay diagnostic updates until some time after the last diagnostic update.
1623
1624```json
1625{
1626  "diagnostics": {
1627    "inline": {
1628      "enabled": true,
1629      "update_debounce_ms": 150
1630    }
1631  }
1632}
1633```
1634
16353. Set padding between the end of the source line and the start of the diagnostic.
1636
1637```json
1638{
1639  "diagnostics": {
1640    "inline": {
1641      "enabled": true,
1642      "padding": 4
1643    }
1644  }
1645}
1646```
1647
16484. Horizontally align inline diagnostics at the given column.
1649
1650```json
1651{
1652  "diagnostics": {
1653    "inline": {
1654      "enabled": true,
1655      "min_column": 80
1656    }
1657  }
1658}
1659```
1660
16615. Show only warning and error diagnostics.
1662
1663```json
1664{
1665  "diagnostics": {
1666    "inline": {
1667      "enabled": true,
1668      "max_severity": "warning"
1669    }
1670  }
1671}
1672```
1673
1674## Git
1675
1676- Description: Configuration for git-related features.
1677- Setting: `git`
1678- Default:
1679
1680```json
1681{
1682  "git": {
1683    "git_gutter": "tracked_files",
1684    "inline_blame": {
1685      "enabled": true
1686    },
1687    "hunk_style": "staged_hollow"
1688  }
1689}
1690```
1691
1692### Git Gutter
1693
1694- Description: Whether or not to show the git gutter.
1695- Setting: `git_gutter`
1696- Default: `tracked_files`
1697
1698**Options**
1699
17001. Show git gutter in tracked files
1701
1702```json
1703{
1704  "git": {
1705    "git_gutter": "tracked_files"
1706  }
1707}
1708```
1709
17102. Hide git gutter
1711
1712```json
1713{
1714  "git": {
1715    "git_gutter": "hide"
1716  }
1717}
1718```
1719
1720### Gutter Debounce
1721
1722- Description: Sets the debounce threshold (in milliseconds) after which changes are reflected in the git gutter.
1723- Setting: `gutter_debounce`
1724- Default: `null`
1725
1726**Options**
1727
1728`integer` values representing milliseconds
1729
1730Example:
1731
1732```json
1733{
1734  "git": {
1735    "gutter_debounce": 100
1736  }
1737}
1738```
1739
1740### Inline Git Blame
1741
1742- Description: Whether or not to show git blame information inline, on the currently focused line.
1743- Setting: `inline_blame`
1744- Default:
1745
1746```json
1747{
1748  "git": {
1749    "inline_blame": {
1750      "enabled": true
1751    }
1752  }
1753}
1754```
1755
1756**Options**
1757
17581. Disable inline git blame:
1759
1760```json
1761{
1762  "git": {
1763    "inline_blame": {
1764      "enabled": false
1765    }
1766  }
1767}
1768```
1769
17702. Only show inline git blame after a delay (that starts after cursor stops moving):
1771
1772```json
1773{
1774  "git": {
1775    "inline_blame": {
1776      "enabled": true,
1777      "delay_ms": 500
1778    }
1779  }
1780}
1781```
1782
17833. Show a commit summary next to the commit date and author:
1784
1785```json
1786{
1787  "git": {
1788    "inline_blame": {
1789      "enabled": true,
1790      "show_commit_summary": true
1791    }
1792  }
1793}
1794```
1795
17964. Use this as the minimum column at which to display inline blame information:
1797
1798```json
1799{
1800  "git": {
1801    "inline_blame": {
1802      "enabled": true,
1803      "min_column": 80
1804    }
1805  }
1806}
1807```
1808
1809### Hunk Style
1810
1811- Description: What styling we should use for the diff hunks.
1812- Setting: `hunk_style`
1813- Default:
1814
1815```json
1816{
1817  "git": {
1818    "hunk_style": "staged_hollow"
1819  }
1820}
1821```
1822
1823**Options**
1824
18251. Show the staged hunks faded out and with a border:
1826
1827```json
1828{
1829  "git": {
1830    "hunk_style": "staged_hollow"
1831  }
1832}
1833```
1834
18352. Show unstaged hunks faded out and with a border:
1836
1837```json
1838{
1839  "git": {
1840    "hunk_style": "unstaged_hollow"
1841  }
1842}
1843```
1844
1845## Indent Guides
1846
1847- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
1848- Setting: `indent_guides`
1849- Default:
1850
1851```json
1852{
1853  "indent_guides": {
1854    "enabled": true,
1855    "line_width": 1,
1856    "active_line_width": 1,
1857    "coloring": "fixed",
1858    "background_coloring": "disabled"
1859  }
1860}
1861```
1862
1863**Options**
1864
18651. Disable indent guides
1866
1867```json
1868{
1869  "indent_guides": {
1870    "enabled": false
1871  }
1872}
1873```
1874
18752. Enable indent guides for a specific language.
1876
1877```json
1878{
1879  "languages": {
1880    "Python": {
1881      "indent_guides": {
1882        "enabled": true
1883      }
1884    }
1885  }
1886}
1887```
1888
18893. Enable indent aware coloring ("rainbow indentation").
1890   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.
1891
1892```json
1893{
1894  "indent_guides": {
1895    "enabled": true,
1896    "coloring": "indent_aware"
1897  }
1898}
1899```
1900
19014. Enable indent aware background coloring ("rainbow indentation").
1902   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.
1903
1904```json
1905{
1906  "indent_guides": {
1907    "enabled": true,
1908    "coloring": "indent_aware",
1909    "background_coloring": "indent_aware"
1910  }
1911}
1912```
1913
1914## Hard Tabs
1915
1916- Description: Whether to indent lines using tab characters or multiple spaces.
1917- Setting: `hard_tabs`
1918- Default: `false`
1919
1920**Options**
1921
1922`boolean` values
1923
1924## Hover Popover Enabled
1925
1926- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
1927- Setting: `hover_popover_enabled`
1928- Default: `true`
1929
1930**Options**
1931
1932`boolean` values
1933
1934## Hover Popover Delay
1935
1936- Description: Time to wait in milliseconds before showing the informational hover box.
1937- Setting: `hover_popover_delay`
1938- Default: `300`
1939
1940**Options**
1941
1942`integer` values representing milliseconds
1943
1944## Icon Theme
1945
1946- 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.
1947- Setting: `icon_theme`
1948- Default: `Zed (Default)`
1949
1950### Icon Theme Object
1951
1952- Description: Specify the icon theme using an object that includes the `mode`, `dark`, and `light`.
1953- Setting: `icon_theme`
1954- Default:
1955
1956```json
1957"icon_theme": {
1958  "mode": "system",
1959  "dark": "Zed (Default)",
1960  "light": "Zed (Default)"
1961},
1962```
1963
1964### Mode
1965
1966- Description: Specify the icon theme mode.
1967- Setting: `mode`
1968- Default: `system`
1969
1970**Options**
1971
19721. Set the icon theme to dark mode
1973
1974```json
1975{
1976  "mode": "dark"
1977}
1978```
1979
19802. Set the icon theme to light mode
1981
1982```json
1983{
1984  "mode": "light"
1985}
1986```
1987
19883. Set the icon theme to system mode
1989
1990```json
1991{
1992  "mode": "system"
1993}
1994```
1995
1996### Dark
1997
1998- Description: The name of the dark icon theme.
1999- Setting: `dark`
2000- Default: `Zed (Default)`
2001
2002**Options**
2003
2004Run the `icon theme selector: toggle` action in the command palette to see a current list of valid icon themes names.
2005
2006### Light
2007
2008- Description: The name of the light icon theme.
2009- Setting: `light`
2010- Default: `Zed (Default)`
2011
2012**Options**
2013
2014Run the `icon theme selector: toggle` action in the command palette to see a current list of valid icon themes names.
2015
2016## Inlay hints
2017
2018- Description: Configuration for displaying extra text with hints in the editor.
2019- Setting: `inlay_hints`
2020- Default:
2021
2022```json
2023"inlay_hints": {
2024  "enabled": false,
2025  "show_type_hints": true,
2026  "show_parameter_hints": true,
2027  "show_other_hints": true,
2028  "show_background": false,
2029  "edit_debounce_ms": 700,
2030  "scroll_debounce_ms": 50,
2031  "toggle_on_modifiers_press": null
2032}
2033```
2034
2035**Options**
2036
2037Inlay hints querying consists of two parts: editor (client) and LSP server.
2038With 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.
2039At 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.
2040
2041The following languages have inlay hints preconfigured by Zed:
2042
2043- [Go](https://docs.zed.dev/languages/go)
2044- [Rust](https://docs.zed.dev/languages/rust)
2045- [Svelte](https://docs.zed.dev/languages/svelte)
2046- [Typescript](https://docs.zed.dev/languages/typescript)
2047
2048Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
2049
2050Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
2051Settings-related hint updates are not debounced.
2052
2053All possible config values for `toggle_on_modifiers_press` are:
2054
2055```json
2056"inlay_hints": {
2057  "toggle_on_modifiers_press": {
2058    "control": true,
2059    "shift": true,
2060    "alt": true,
2061    "platform": true,
2062    "function": true
2063  }
2064}
2065```
2066
2067Unspecified values have a `false` value, hints won't be toggled if all the modifiers are `false` or not all the modifiers are pressed.
2068
2069## Journal
2070
2071- Description: Configuration for the journal.
2072- Setting: `journal`
2073- Default:
2074
2075```json
2076"journal": {
2077  "path": "~",
2078  "hour_format": "hour12"
2079}
2080```
2081
2082### Path
2083
2084- Description: The path of the directory where journal entries are stored.
2085- Setting: `path`
2086- Default: `~`
2087
2088**Options**
2089
2090`string` values
2091
2092### Hour Format
2093
2094- Description: The format to use for displaying hours in the journal.
2095- Setting: `hour_format`
2096- Default: `hour12`
2097
2098**Options**
2099
21001. 12-hour format:
2101
2102```json
2103{
2104  "hour_format": "hour12"
2105}
2106```
2107
21082. 24-hour format:
2109
2110```json
2111{
2112  "hour_format": "hour24"
2113}
2114```
2115
2116## Languages
2117
2118- Description: Configuration for specific languages.
2119- Setting: `languages`
2120- Default: `null`
2121
2122**Options**
2123
2124To override settings for a language, add an entry for that languages name to the `languages` value. Example:
2125
2126```json
2127"languages": {
2128  "C": {
2129    "format_on_save": "off",
2130    "preferred_line_length": 64,
2131    "soft_wrap": "preferred_line_length"
2132  },
2133  "JSON": {
2134    "tab_size": 4
2135  }
2136}
2137```
2138
2139The following settings can be overridden for each specific language:
2140
2141- [`enable_language_server`](#enable-language-server)
2142- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
2143- [`format_on_save`](#format-on-save)
2144- [`formatter`](#formatter)
2145- [`hard_tabs`](#hard-tabs)
2146- [`preferred_line_length`](#preferred-line-length)
2147- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
2148- [`show_edit_predictions`](#show-edit-predictions)
2149- [`show_whitespaces`](#show-whitespaces)
2150- [`soft_wrap`](#soft-wrap)
2151- [`tab_size`](#tab-size)
2152- [`use_autoclose`](#use-autoclose)
2153- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
2154
2155These values take in the same options as the root-level settings with the same name.
2156
2157## Network Proxy
2158
2159- Description: Configure a network proxy for Zed.
2160- Setting: `proxy`
2161- Default: `null`
2162
2163**Options**
2164
2165The proxy setting must contain a URL to the proxy.
2166
2167The following URI schemes are supported:
2168
2169- `http`
2170- `https`
2171- `socks4` - SOCKS4 proxy with local DNS
2172- `socks4a` - SOCKS4 proxy with remote DNS
2173- `socks5` - SOCKS5 proxy with local DNS
2174- `socks5h` - SOCKS5 proxy with remote DNS
2175
2176`http` will be used when no scheme is specified.
2177
2178By 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`.
2179
2180For example, to set an `http` proxy, add the following to your settings:
2181
2182```json
2183{
2184  "proxy": "http://127.0.0.1:10809"
2185}
2186```
2187
2188Or to set a `socks5` proxy:
2189
2190```json
2191{
2192  "proxy": "socks5h://localhost:10808"
2193}
2194```
2195
2196## Preview tabs
2197
2198- Description:
2199  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. \
2200   There are several ways to convert a preview tab into a regular tab:
2201
2202  - Double-clicking on the file
2203  - Double-clicking on the tab header
2204  - Using the `project_panel::OpenPermanent` action
2205  - Editing the file
2206  - Dragging the file to a different pane
2207
2208- Setting: `preview_tabs`
2209- Default:
2210
2211```json
2212"preview_tabs": {
2213  "enabled": true,
2214  "enable_preview_from_file_finder": false,
2215  "enable_preview_from_code_navigation": false,
2216}
2217```
2218
2219### Enable preview from file finder
2220
2221- Description: Determines whether to open files in preview mode when selected from the file finder.
2222- Setting: `enable_preview_from_file_finder`
2223- Default: `false`
2224
2225**Options**
2226
2227`boolean` values
2228
2229### Enable preview from code navigation
2230
2231- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
2232- Setting: `enable_preview_from_code_navigation`
2233- Default: `false`
2234
2235**Options**
2236
2237`boolean` values
2238
2239## File Finder
2240
2241### File Icons
2242
2243- Description: Whether to show file icons in the file finder.
2244- Setting: `file_icons`
2245- Default: `true`
2246
2247### Modal Max Width
2248
2249- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
2250- Setting: `modal_max_width`
2251- Default: `small`
2252
2253### Skip Focus For Active In Search
2254
2255- Description: Determines whether the file finder should skip focus for the active file in search results.
2256- Setting: `skip_focus_for_active_in_search`
2257- Default: `true`
2258
2259## Preferred Line Length
2260
2261- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
2262- Setting: `preferred_line_length`
2263- Default: `80`
2264
2265**Options**
2266
2267`integer` values
2268
2269## Projects Online By Default
2270
2271- Description: Whether or not to show the online projects view by default.
2272- Setting: `projects_online_by_default`
2273- Default: `true`
2274
2275**Options**
2276
2277`boolean` values
2278
2279## Remove Trailing Whitespace On Save
2280
2281- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
2282- Setting: `remove_trailing_whitespace_on_save`
2283- Default: `true`
2284
2285**Options**
2286
2287`boolean` values
2288
2289## Search
2290
2291- Description: Search options to enable by default when opening new project and buffer searches.
2292- Setting: `search`
2293- Default:
2294
2295```json
2296"search": {
2297  "whole_word": false,
2298  "case_sensitive": false,
2299  "include_ignored": false,
2300  "regex": false
2301},
2302```
2303
2304## Seed Search Query From Cursor
2305
2306- Description: When to populate a new search's query based on the text under the cursor.
2307- Setting: `seed_search_query_from_cursor`
2308- Default: `always`
2309
2310**Options**
2311
23121. `always` always populate the search query with the word under the cursor
23132. `selection` only populate the search query when there is text selected
23143. `never` never populate the search query
2315
2316## Use Smartcase Search
2317
2318- 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. \
2319  This applies to both in-file searches and project-wide searches.
2320- Setting: `use_smartcase_search`
2321- Default: `false`
2322
2323**Options**
2324
2325`boolean` values
2326
2327Examples:
2328
2329- Searching for "function" would match "function", "Function", "FUNCTION", etc.
2330- Searching for "Function" would only match "Function", not "function" or "FUNCTION"
2331
2332## Show Call Status Icon
2333
2334- Description: Whether or not to show the call status icon in the status bar.
2335- Setting: `show_call_status_icon`
2336- Default: `true`
2337
2338**Options**
2339
2340`boolean` values
2341
2342## Completions
2343
2344- Description: Controls how completions are processed for this language.
2345- Setting: `completions`
2346- Default:
2347
2348```json
2349{
2350  "completions": {
2351    "words": "fallback",
2352    "lsp": true,
2353    "lsp_fetch_timeout_ms": 0,
2354    "lsp_insert_mode": "replace_suffix"
2355  }
2356}
2357```
2358
2359### Words
2360
2361- Description: Controls how words are completed. For large documents, not all words may be fetched for completion.
2362- Setting: `words`
2363- Default: `fallback`
2364
2365**Options**
2366
23671. `enabled` - Always fetch document's words for completions along with LSP completions
23682. `fallback` - Only if LSP response errors or times out, use document's words to show completions
23693. `disabled` - Never fetch or complete document's words for completions (word-based completions can still be queried via a separate action)
2370
2371### LSP
2372
2373- Description: Whether to fetch LSP completions or not.
2374- Setting: `lsp`
2375- Default: `true`
2376
2377**Options**
2378
2379`boolean` values
2380
2381### LSP Fetch Timeout (ms)
2382
2383- Description: When fetching LSP completions, determines how long to wait for a response of a particular server. When set to 0, waits indefinitely.
2384- Setting: `lsp_fetch_timeout_ms`
2385- Default: `0`
2386
2387**Options**
2388
2389`integer` values representing milliseconds
2390
2391### LSP Insert Mode
2392
2393- Description: Controls what range to replace when accepting LSP completions.
2394- Setting: `lsp_insert_mode`
2395- Default: `replace_suffix`
2396
2397**Options**
2398
23991. `insert` - Replaces text before the cursor, using the `insert` range described in the LSP specification
24002. `replace` - Replaces text before and after the cursor, using the `replace` range described in the LSP specification
24013. `replace_subsequence` - Behaves like `"replace"` if the text that would be replaced is a subsequence of the completion text, and like `"insert"` otherwise
24024. `replace_suffix` - Behaves like `"replace"` if the text after the cursor is a suffix of the completion, and like `"insert"` otherwise
2403
2404## Show Completions On Input
2405
2406- Description: Whether or not to show completions as you type.
2407- Setting: `show_completions_on_input`
2408- Default: `true`
2409
2410**Options**
2411
2412`boolean` values
2413
2414## Show Completion Documentation
2415
2416- Description: Whether to display inline and alongside documentation for items in the completions menu.
2417- Setting: `show_completion_documentation`
2418- Default: `true`
2419
2420**Options**
2421
2422`boolean` values
2423
2424## Show Edit Predictions
2425
2426- Description: Whether to show edit predictions as you type or manually by triggering `editor::ShowEditPrediction`.
2427- Setting: `show_edit_predictions`
2428- Default: `true`
2429
2430**Options**
2431
2432`boolean` values
2433
2434## Show Whitespaces
2435
2436- Description: Whether or not to render whitespace characters in the editor.
2437- Setting: `show_whitespaces`
2438- Default: `selection`
2439
2440**Options**
2441
24421. `all`
24432. `selection`
24443. `none`
24454. `boundary`
2446
2447## Soft Wrap
2448
2449- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
2450- Setting: `soft_wrap`
2451- Default: `none`
2452
2453**Options**
2454
24551. `none` to avoid wrapping generally, unless the line is too long
24562. `prefer_line` (deprecated, same as `none`)
24573. `editor_width` to wrap lines that overflow the editor width
24584. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
24595. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
2460
2461## Wrap Guides (Vertical Rulers)
2462
2463- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
2464- Setting: `wrap_guides`
2465- Default: []
2466
2467**Options**
2468
2469List of `integer` column numbers
2470
2471## Tab Size
2472
2473- Description: The number of spaces to use for each tab character.
2474- Setting: `tab_size`
2475- Default: `4`
2476
2477**Options**
2478
2479`integer` values
2480
2481## Telemetry
2482
2483- Description: Control what info is collected by Zed.
2484- Setting: `telemetry`
2485- Default:
2486
2487```json
2488"telemetry": {
2489  "diagnostics": true,
2490  "metrics": true
2491},
2492```
2493
2494**Options**
2495
2496### Diagnostics
2497
2498- Description: Setting for sending debug-related data, such as crash reports.
2499- Setting: `diagnostics`
2500- Default: `true`
2501
2502**Options**
2503
2504`boolean` values
2505
2506### Metrics
2507
2508- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
2509- Setting: `metrics`
2510- Default: `true`
2511
2512**Options**
2513
2514`boolean` values
2515
2516## Terminal
2517
2518- Description: Configuration for the terminal.
2519- Setting: `terminal`
2520- Default:
2521
2522```json
2523{
2524  "terminal": {
2525    "alternate_scroll": "off",
2526    "blinking": "terminal_controlled",
2527    "copy_on_select": false,
2528    "dock": "bottom",
2529    "default_width": 640,
2530    "default_height": 320,
2531    "detect_venv": {
2532      "on": {
2533        "directories": [".env", "env", ".venv", "venv"],
2534        "activate_script": "default"
2535      }
2536    },
2537    "env": {},
2538    "font_family": null,
2539    "font_features": null,
2540    "font_size": null,
2541    "line_height": "comfortable",
2542    "option_as_meta": false,
2543    "button": true,
2544    "shell": "system",
2545    "toolbar": {
2546      "breadcrumbs": true
2547    },
2548    "working_directory": "current_project_directory",
2549    "scrollbar": {
2550      "show": null
2551    }
2552  }
2553}
2554```
2555
2556### Terminal: Dock
2557
2558- Description: Control the position of the dock
2559- Setting: `dock`
2560- Default: `bottom`
2561
2562**Options**
2563
2564`"bottom"`, `"left"` or `"right"`
2565
2566### Terminal: Alternate Scroll
2567
2568- 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.
2569- Setting: `alternate_scroll`
2570- Default: `off`
2571
2572**Options**
2573
25741. Default alternate scroll mode to off
2575
2576```json
2577{
2578  "terminal": {
2579    "alternate_scroll": "off"
2580  }
2581}
2582```
2583
25842. Default alternate scroll mode to on
2585
2586```json
2587{
2588  "terminal": {
2589    "alternate_scroll": "on"
2590  }
2591}
2592```
2593
2594### Terminal: Blinking
2595
2596- Description: Set the cursor blinking behavior in the terminal
2597- Setting: `blinking`
2598- Default: `terminal_controlled`
2599
2600**Options**
2601
26021. Never blink the cursor, ignore the terminal mode
2603
2604```json
2605{
2606  "terminal": {
2607    "blinking": "off"
2608  }
2609}
2610```
2611
26122. Default the cursor blink to off, but allow the terminal to turn blinking on
2613
2614```json
2615{
2616  "terminal": {
2617    "blinking": "terminal_controlled"
2618  }
2619}
2620```
2621
26223. Always blink the cursor, ignore the terminal mode
2623
2624```json
2625{
2626  "terminal": {
2627    "blinking": "on"
2628  }
2629}
2630```
2631
2632### Terminal: Copy On Select
2633
2634- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
2635- Setting: `copy_on_select`
2636- Default: `false`
2637
2638**Options**
2639
2640`boolean` values
2641
2642**Example**
2643
2644```json
2645{
2646  "terminal": {
2647    "copy_on_select": true
2648  }
2649}
2650```
2651
2652### Terminal: Env
2653
2654- 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
2655- Setting: `env`
2656- Default: `{}`
2657
2658**Example**
2659
2660```json
2661{
2662  "terminal": {
2663    "env": {
2664      "ZED": "1",
2665      "KEY": "value1:value2"
2666    }
2667  }
2668}
2669```
2670
2671### Terminal: Font Size
2672
2673- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
2674- Setting: `font_size`
2675- Default: `null`
2676
2677**Options**
2678
2679`integer` values
2680
2681```json
2682{
2683  "terminal": {
2684    "font_size": 15
2685  }
2686}
2687```
2688
2689### Terminal: Font Family
2690
2691- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
2692- Setting: `font_family`
2693- Default: `null`
2694
2695**Options**
2696
2697The name of any font family installed on the user's system
2698
2699```json
2700{
2701  "terminal": {
2702    "font_family": "Berkeley Mono"
2703  }
2704}
2705```
2706
2707### Terminal: Font Features
2708
2709- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
2710- Setting: `font_features`
2711- Default: `null`
2712- Platform: macOS and Windows.
2713
2714**Options**
2715
2716See Buffer Font Features
2717
2718```json
2719{
2720  "terminal": {
2721    "font_features": {
2722      "calt": false
2723      // See Buffer Font Features for more features
2724    }
2725  }
2726}
2727```
2728
2729### Terminal: Line Height
2730
2731- Description: Set the terminal's line height.
2732- Setting: `line_height`
2733- Default: `comfortable`
2734
2735**Options**
2736
27371. Use a line height that's `comfortable` for reading, 1.618. (default)
2738
2739```json
2740{
2741  "terminal": {
2742    "line_height": "comfortable"
2743  }
2744}
2745```
2746
27472. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
2748
2749```json
2750{
2751  "terminal": {
2752    "line_height": "standard"
2753  }
2754}
2755```
2756
27573.  Use a custom line height.
2758
2759```json
2760{
2761  "terminal": {
2762    "line_height": {
2763      "custom": 2
2764    }
2765  }
2766}
2767```
2768
2769### Terminal: Option As Meta
2770
2771- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
2772- Setting: `option_as_meta`
2773- Default: `false`
2774
2775**Options**
2776
2777`boolean` values
2778
2779```json
2780{
2781  "terminal": {
2782    "option_as_meta": true
2783  }
2784}
2785```
2786
2787### Terminal: Shell
2788
2789- Description: What shell to use when launching the terminal.
2790- Setting: `shell`
2791- Default: `system`
2792
2793**Options**
2794
27951. Use the system's default terminal configuration (usually the `/etc/passwd` file).
2796
2797```json
2798{
2799  "terminal": {
2800    "shell": "system"
2801  }
2802}
2803```
2804
28052. A program to launch:
2806
2807```json
2808{
2809  "terminal": {
2810    "shell": {
2811      "program": "sh"
2812    }
2813  }
2814}
2815```
2816
28173. A program with arguments:
2818
2819```json
2820{
2821  "terminal": {
2822    "shell": {
2823      "with_arguments": {
2824        "program": "/bin/bash",
2825        "args": ["--login"]
2826      }
2827    }
2828  }
2829}
2830```
2831
2832## Terminal: Detect Virtual Environments {#terminal-detect_venv}
2833
2834- 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.
2835- Setting: `detect_venv`
2836- Default:
2837
2838```json
2839{
2840  "terminal": {
2841    "detect_venv": {
2842      "on": {
2843        // Default directories to search for virtual environments, relative
2844        // to the current working directory. We recommend overriding this
2845        // in your project's settings, rather than globally.
2846        "directories": [".env", "env", ".venv", "venv"],
2847        // Can also be `csh`, `fish`, and `nushell`
2848        "activate_script": "default"
2849      }
2850    }
2851  }
2852}
2853```
2854
2855Disable with:
2856
2857```json
2858{
2859  "terminal": {
2860    "detect_venv": "off"
2861  }
2862}
2863```
2864
2865## Terminal: Toolbar
2866
2867- Description: Whether or not to show various elements in the terminal toolbar.
2868- Setting: `toolbar`
2869- Default:
2870
2871```json
2872{
2873  "terminal": {
2874    "toolbar": {
2875      "breadcrumbs": true
2876    }
2877  }
2878}
2879```
2880
2881**Options**
2882
2883At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
2884
2885If the terminal title is empty, the breadcrumbs won't be shown.
2886
2887The shell running in the terminal needs to be configured to emit the title.
2888
2889Example command to set the title: `echo -e "\e]2;New Title\007";`
2890
2891### Terminal: Button
2892
2893- Description: Control to show or hide the terminal button in the status bar
2894- Setting: `button`
2895- Default: `true`
2896
2897**Options**
2898
2899`boolean` values
2900
2901```json
2902{
2903  "terminal": {
2904    "button": false
2905  }
2906}
2907```
2908
2909### Terminal: Working Directory
2910
2911- Description: What working directory to use when launching the terminal.
2912- Setting: `working_directory`
2913- Default: `"current_project_directory"`
2914
2915**Options**
2916
29171. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
2918
2919```json
2920{
2921  "terminal": {
2922    "working_directory": "current_project_directory"
2923  }
2924}
2925```
2926
29272. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
2928
2929```json
2930{
2931  "terminal": {
2932    "working_directory": "first_project_directory"
2933  }
2934}
2935```
2936
29373. Always use this platform's home directory (if we can find it)
2938
2939```json
2940{
2941  "terminal": {
2942    "working_directory": "always_home"
2943  }
2944}
2945```
2946
29474. 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.
2948
2949```json
2950{
2951  "terminal": {
2952    "working_directory": {
2953      "always": {
2954        "directory": "~/zed/projects/"
2955      }
2956    }
2957  }
2958}
2959```
2960
2961## Theme
2962
2963- 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.
2964- Setting: `theme`
2965- Default: `One Dark`
2966
2967### Theme Object
2968
2969- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2970- Setting: `theme`
2971- Default:
2972
2973```json
2974"theme": {
2975  "mode": "system",
2976  "dark": "One Dark",
2977  "light": "One Light"
2978},
2979```
2980
2981### Mode
2982
2983- Description: Specify theme mode.
2984- Setting: `mode`
2985- Default: `system`
2986
2987**Options**
2988
29891. Set the theme to dark mode
2990
2991```json
2992{
2993  "mode": "dark"
2994}
2995```
2996
29972. Set the theme to light mode
2998
2999```json
3000{
3001  "mode": "light"
3002}
3003```
3004
30053. Set the theme to system mode
3006
3007```json
3008{
3009  "mode": "system"
3010}
3011```
3012
3013### Dark
3014
3015- Description: The name of the dark Zed theme to use for the UI.
3016- Setting: `dark`
3017- Default: `One Dark`
3018
3019**Options**
3020
3021Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
3022
3023### Light
3024
3025- Description: The name of the light Zed theme to use for the UI.
3026- Setting: `light`
3027- Default: `One Light`
3028
3029**Options**
3030
3031Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
3032
3033## Vim
3034
3035- Description: Whether or not to enable vim mode (work in progress).
3036- Setting: `vim_mode`
3037- Default: `false`
3038
3039## Project Panel
3040
3041- Description: Customize project panel
3042- Setting: `project_panel`
3043- Default:
3044
3045```json
3046{
3047  "project_panel": {
3048    "button": true,
3049    "default_width": 240,
3050    "dock": "left",
3051    "entry_spacing": "comfortable",
3052    "file_icons": true,
3053    "folder_icons": true,
3054    "git_status": true,
3055    "indent_size": 20,
3056    "auto_reveal_entries": true,
3057    "auto_fold_dirs": true,
3058    "scrollbar": {
3059      "show": null
3060    },
3061    "show_diagnostics": "all",
3062    "indent_guides": {
3063      "show": "always"
3064    }
3065  }
3066}
3067```
3068
3069### Dock
3070
3071- Description: Control the position of the dock
3072- Setting: `dock`
3073- Default: `left`
3074
3075**Options**
3076
30771. Default dock position to left
3078
3079```json
3080{
3081  "dock": "left"
3082}
3083```
3084
30852. Default dock position to right
3086
3087```json
3088{
3089  "dock": "right"
3090}
3091```
3092
3093### Entry Spacing
3094
3095- Description: Spacing between worktree entries
3096- Setting: `entry_spacing`
3097- Default: `comfortable`
3098
3099**Options**
3100
31011. Comfortable entry spacing
3102
3103```json
3104{
3105  "entry_spacing": "comfortable"
3106}
3107```
3108
31092. Standard entry spacing
3110
3111```json
3112{
3113  "entry_spacing": "standard"
3114}
3115```
3116
3117### Git Status
3118
3119- Description: Indicates newly created and updated files
3120- Setting: `git_status`
3121- Default: `true`
3122
3123**Options**
3124
31251. Default enable git status
3126
3127```json
3128{
3129  "git_status": true
3130}
3131```
3132
31332. Default disable git status
3134
3135```json
3136{
3137  "git_status": false
3138}
3139```
3140
3141### Default Width
3142
3143- Description: Customize default width taken by project panel
3144- Setting: `default_width`
3145- Default: `240`
3146
3147**Options**
3148
3149`float` values
3150
3151### Auto Reveal Entries
3152
3153- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
3154- Setting: `auto_reveal_entries`
3155- Default: `true`
3156
3157**Options**
3158
31591. Enable auto reveal entries
3160
3161```json
3162{
3163  "auto_reveal_entries": true
3164}
3165```
3166
31672. Disable auto reveal entries
3168
3169```json
3170{
3171  "auto_reveal_entries": false
3172}
3173```
3174
3175### Auto Fold Dirs
3176
3177- Description: Whether to fold directories automatically when directory has only one directory inside.
3178- Setting: `auto_fold_dirs`
3179- Default: `true`
3180
3181**Options**
3182
31831. Enable auto fold dirs
3184
3185```json
3186{
3187  "auto_fold_dirs": true
3188}
3189```
3190
31912. Disable auto fold dirs
3192
3193```json
3194{
3195  "auto_fold_dirs": false
3196}
3197```
3198
3199### Indent Size
3200
3201- Description: Amount of indentation (in pixels) for nested items.
3202- Setting: `indent_size`
3203- Default: `20`
3204
3205### Indent Guides: Show
3206
3207- Description: Whether to show indent guides in the project panel.
3208- Setting: `indent_guides`
3209- Default:
3210
3211```json
3212"indent_guides": {
3213  "show": "always"
3214}
3215```
3216
3217**Options**
3218
32191. Show indent guides in the project panel
3220
3221```json
3222{
3223  "indent_guides": {
3224    "show": "always"
3225  }
3226}
3227```
3228
32292. Hide indent guides in the project panel
3230
3231```json
3232{
3233  "indent_guides": {
3234    "show": "never"
3235  }
3236}
3237```
3238
3239### Scrollbar: Show
3240
3241- 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.
3242- Setting: `scrollbar`
3243- Default:
3244
3245```json
3246"scrollbar": {
3247  "show": null
3248}
3249```
3250
3251**Options**
3252
32531. Show scrollbar in the project panel
3254
3255```json
3256{
3257  "scrollbar": {
3258    "show": "always"
3259  }
3260}
3261```
3262
32632. Hide scrollbar in the project panel
3264
3265```json
3266{
3267  "scrollbar": {
3268    "show": "never"
3269  }
3270}
3271```
3272
3273## Agent
3274
3275- Description: Customize agent behavior
3276- Setting: `agent`
3277- Default:
3278
3279```json
3280"agent": {
3281  "version": "2",
3282  "enabled": true,
3283  "button": true,
3284  "dock": "right",
3285  "default_width": 640,
3286  "default_height": 320,
3287  "default_view": "thread",
3288  "default_model": {
3289    "provider": "zed.dev",
3290    "model": "claude-sonnet-4"
3291  },
3292  "editor_model": {
3293    "provider": "zed.dev",
3294    "model": "claude-sonnet-4"
3295  },
3296  "single_file_review": true,
3297}
3298```
3299
3300## Outline Panel
3301
3302- Description: Customize outline Panel
3303- Setting: `outline_panel`
3304- Default:
3305
3306```json
3307"outline_panel": {
3308  "button": true,
3309  "default_width": 300,
3310  "dock": "left",
3311  "file_icons": true,
3312  "folder_icons": true,
3313  "git_status": true,
3314  "indent_size": 20,
3315  "auto_reveal_entries": true,
3316  "auto_fold_dirs": true,
3317  "indent_guides": {
3318    "show": "always"
3319  },
3320  "scrollbar": {
3321    "show": null
3322  }
3323}
3324```
3325
3326## Calls
3327
3328- Description: Customize behavior when participating in a call
3329- Setting: `calls`
3330- Default:
3331
3332```json
3333"calls": {
3334  // Join calls with the microphone live by default
3335  "mute_on_join": false,
3336  // Share your project when you are the first to join a channel
3337  "share_on_join": false
3338},
3339```
3340
3341## Unnecessary Code Fade
3342
3343- Description: How much to fade out unused code.
3344- Setting: `unnecessary_code_fade`
3345- Default: `0.3`
3346
3347**Options**
3348
3349Float values between `0.0` and `0.9`, where:
3350
3351- `0.0` means no fading (unused code looks the same as used code)
3352- `0.9` means maximum fading (unused code is very faint but still visible)
3353
3354**Example**
3355
3356```json
3357{
3358  "unnecessary_code_fade": 0.5
3359}
3360```
3361
3362## UI Font Family
3363
3364- Description: The name of the font to use for text in the UI.
3365- Setting: `ui_font_family`
3366- Default: `Zed Plex Sans`
3367
3368**Options**
3369
3370The name of any font family installed on the system.
3371
3372## UI Font Features
3373
3374- Description: The OpenType features to enable for text in the UI.
3375- Setting: `ui_font_features`
3376- Default:
3377
3378```json
3379"ui_font_features": {
3380  "calt": false
3381}
3382```
3383
3384- Platform: macOS and Windows.
3385
3386**Options**
3387
3388Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
3389
3390For example, to disable font ligatures, add the following to your settings:
3391
3392```json
3393{
3394  "ui_font_features": {
3395    "calt": false
3396  }
3397}
3398```
3399
3400You can also set other OpenType features, like setting `cv01` to `7`:
3401
3402```json
3403{
3404  "ui_font_features": {
3405    "cv01": 7
3406  }
3407}
3408```
3409
3410## UI Font Fallbacks
3411
3412- Description: The font fallbacks to use for text in the UI.
3413- Setting: `ui_font_fallbacks`
3414- Default: `null`
3415- Platform: macOS and Windows.
3416
3417**Options**
3418
3419For example, to use `Nerd Font` as a fallback, add the following to your settings:
3420
3421```json
3422{
3423  "ui_font_fallbacks": ["Nerd Font"]
3424}
3425```
3426
3427## UI Font Size
3428
3429- Description: The default font size for text in the UI.
3430- Setting: `ui_font_size`
3431- Default: `16`
3432
3433**Options**
3434
3435`integer` values from `6` to `100` pixels (inclusive)
3436
3437## UI Font Weight
3438
3439- Description: The default font weight for text in the UI.
3440- Setting: `ui_font_weight`
3441- Default: `400`
3442
3443**Options**
3444
3445`integer` values between `100` and `900`
3446
3447## An example configuration:
3448
3449```json
3450// ~/.config/zed/settings.json
3451{
3452  "theme": "cave-light",
3453  "tab_size": 2,
3454  "preferred_line_length": 80,
3455  "soft_wrap": "none",
3456
3457  "buffer_font_size": 18,
3458  "buffer_font_family": "Zed Plex Mono",
3459
3460  "autosave": "on_focus_change",
3461  "format_on_save": "off",
3462  "vim_mode": false,
3463  "projects_online_by_default": true,
3464  "terminal": {
3465    "font_family": "FiraCode Nerd Font Mono",
3466    "blinking": "off"
3467  },
3468  "languages": {
3469    "C": {
3470      "format_on_save": "language_server",
3471      "preferred_line_length": 64,
3472      "soft_wrap": "preferred_line_length"
3473    }
3474  }
3475}
3476```