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
  34Styling settings applied to the active pane.
  35
  36### Magnification
  37
  38- 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.
  39- Setting: `magnification`
  40- Default: `1.0`
  41
  42### Border size
  43
  44- 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.
  45- Setting: `border_size`
  46- Default: `0.0`
  47
  48### Inactive Opacity
  49
  50- 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.
  51- Setting: `inactive_opacity`
  52- Default: `1.0`
  53
  54**Options**
  55
  56`float` values
  57
  58## Auto Install extensions
  59
  60- Description: Define extensions to be autoinstalled or never be installed.
  61- Setting: `auto_install_extension`
  62- Default: `{"html": true}`
  63
  64**Options**
  65
  66You can find the names of your currently installed extensions by listing the subfolders under the [extension installation location](./extensions/installing-extensions#installation-location):
  67
  68On MacOS:
  69
  70```sh
  71ls ~/Library/Application\ Support/Zed/extensions/installed/
  72```
  73
  74On Linux:
  75
  76```sh
  77ls ~/.local/share/zed/extensions/installed
  78```
  79
  80Define extensions which should be installed (`true`) or never installed (`false`).
  81
  82```json
  83{
  84  "auto_install_extensions": {
  85    "html": true,
  86    "dockerfile": true,
  87    "docker-compose": false
  88  }
  89}
  90```
  91
  92## Autosave
  93
  94- Description: When to automatically save edited buffers.
  95- Setting: `autosave`
  96- Default: `off`
  97
  98**Options**
  99
 1001. To disable autosave, set it to `off`:
 101
 102```json
 103{
 104  "autosave": "off"
 105}
 106```
 107
 1082. To autosave when focus changes, use `on_focus_change`:
 109
 110```json
 111{
 112  "autosave": "on_focus_change"
 113}
 114```
 115
 1163. To autosave when the active window changes, use `on_window_change`:
 117
 118```json
 119{
 120  "autosave": "on_window_change"
 121}
 122```
 123
 1244. To autosave after an inactivity period, use `after_delay`:
 125
 126```json
 127{
 128  "autosave": {
 129    "after_delay": {
 130      "milliseconds": 1000
 131    }
 132  }
 133}
 134```
 135
 136## Autoscroll on Clicks
 137
 138- Description: Whether to scroll when clicking near the edge of the visible text area.
 139- Setting: `autoscroll_on_clicks`
 140- Default: `false`
 141
 142**Options**
 143
 144`boolean` values
 145
 146## Auto Update
 147
 148- Description: Whether or not to automatically check for updates.
 149- Setting: `auto_update`
 150- Default: `true`
 151
 152**Options**
 153
 154`boolean` values
 155
 156## Base Keymap
 157
 158- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
 159- Setting: `base_keymap`
 160- Default: `VSCode`
 161
 162**Options**
 163
 1641. VSCode
 165
 166```json
 167{
 168  "base_keymap": "VSCode"
 169}
 170```
 171
 1722. Atom
 173
 174```json
 175{
 176  "base_keymap": "Atom"
 177}
 178```
 179
 1803. JetBrains
 181
 182```json
 183{
 184  "base_keymap": "JetBrains"
 185}
 186```
 187
 1884. None
 189
 190```json
 191{
 192  "base_keymap": "None"
 193}
 194```
 195
 1965. SublimeText
 197
 198```json
 199{
 200  "base_keymap": "SublimeText"
 201}
 202```
 203
 2046. TextMate
 205
 206```json
 207{
 208  "base_keymap": "TextMate"
 209}
 210```
 211
 212## Buffer Font Family
 213
 214- Description: The name of a font to use for rendering text in the editor.
 215- Setting: `buffer_font_family`
 216- Default: `Zed Plex Mono`
 217
 218**Options**
 219
 220The name of any font family installed on the user's system
 221
 222## Buffer Font Features
 223
 224- Description: The OpenType features to enable for text in the editor.
 225- Setting: `buffer_font_features`
 226- Default: `null`
 227- Platform: macOS and Windows.
 228
 229**Options**
 230
 231Zed 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.
 232
 233For example, to disable font ligatures, add the following to your settings:
 234
 235```json
 236{
 237  "buffer_font_features": {
 238    "calt": false
 239  }
 240}
 241```
 242
 243You can also set other OpenType features, like setting `cv01` to `7`:
 244
 245```json
 246{
 247  "buffer_font_features": {
 248    "cv01": 7
 249  }
 250}
 251```
 252
 253## Buffer Font Fallbacks
 254
 255- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
 256- Setting: `buffer_font_fallbacks`
 257- Default: `null`
 258- Platform: macOS and Windows.
 259
 260**Options**
 261
 262For example, to use `Nerd Font` as a fallback, add the following to your settings:
 263
 264```json
 265{
 266  "buffer_font_fallbacks": ["Nerd Font"]
 267}
 268```
 269
 270## Buffer Font Size
 271
 272- Description: The default font size for text in the editor.
 273- Setting: `buffer_font_size`
 274- Default: `15`
 275
 276**Options**
 277
 278`integer` values from `6` to `100` pixels (inclusive)
 279
 280## Buffer Font Weight
 281
 282- Description: The default font weight for text in the editor.
 283- Setting: `buffer_font_weight`
 284- Default: `400`
 285
 286**Options**
 287
 288`integer` values between `100` and `900`
 289
 290## Buffer Line Height
 291
 292- Description: The default line height for text in the editor.
 293- Setting: `buffer_line_height`
 294- Default: `"comfortable"`
 295
 296**Options**
 297
 298`"standard"`, `"comfortable"` or `{"custom": float}` (`1` is very compact, `2` very loose)
 299
 300## Confirm Quit
 301
 302- Description: Whether or not to prompt the user to confirm before closing the application.
 303- Setting: `confirm_quit`
 304- Default: `false`
 305
 306**Options**
 307
 308`boolean` values
 309
 310## Centered Layout
 311
 312- Description: Configuration for the centered layout mode.
 313- Setting: `centered_layout`
 314- Default:
 315
 316```json
 317"centered_layout": {
 318  "left_padding": 0.2,
 319  "right_padding": 0.2,
 320}
 321```
 322
 323**Options**
 324
 325The `left_padding` and `right_padding` options define the relative width of the
 326left 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`.
 327
 328## Direnv Integration
 329
 330- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
 331  `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.
 332  It also allows for those environment variables to be used in tasks.
 333- Setting: `load_direnv`
 334- Default:
 335
 336```json
 337"load_direnv": "direct"
 338```
 339
 340**Options**
 341There are two options to choose from:
 342
 3431. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
 3442. `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.
 345
 346## Inline Completions
 347
 348- Description: Settings for inline completions.
 349- Setting: `inline_completions`
 350- Default:
 351
 352```json
 353"inline_completions": {
 354  "disabled_globs": [
 355    ".env"
 356  ]
 357}
 358```
 359
 360**Options**
 361
 362### Disabled Globs
 363
 364- Description: A list of globs representing files that inline completions should be disabled for.
 365- Setting: `disabled_globs`
 366- Default: `[".env"]`
 367
 368**Options**
 369
 370List of `string` values
 371
 372## Inline Completions Disabled in
 373
 374- Description: A list of language scopes in which inline completions should be disabled.
 375- Setting: `inline_completions_disabled_in`
 376- Default: `[]`
 377
 378**Options**
 379
 380List of `string` values
 381
 3821. Don't show inline completions in comments:
 383
 384```json
 385"disabled_in": ["comment"]
 386```
 387
 3882. Don't show inline completions in strings and comments:
 389
 390```json
 391"disabled_in": ["comment", "string"]
 392```
 393
 3943. Only in Go, don't show inline completions in strings and comments:
 395
 396```json
 397{
 398  "languages": {
 399    "Go": {
 400      "inline_completions_disabled_in": ["comment", "string"]
 401    }
 402  }
 403}
 404```
 405
 406## Current Line Highlight
 407
 408- Description: How to highlight the current line in the editor.
 409- Setting: `current_line_highlight`
 410- Default: `all`
 411
 412**Options**
 413
 4141. Don't highlight the current line:
 415
 416```json
 417"current_line_highlight": "none"
 418```
 419
 4202. Highlight the gutter area:
 421
 422```json
 423"current_line_highlight": "gutter"
 424```
 425
 4263. Highlight the editor area:
 427
 428```json
 429"current_line_highlight": "line"
 430```
 431
 4324. Highlight the full line:
 433
 434```json
 435"current_line_highlight": "all"
 436```
 437
 438## Cursor Blink
 439
 440- Description: Whether or not the cursor blinks.
 441- Setting: `cursor_blink`
 442- Default: `true`
 443
 444**Options**
 445
 446`boolean` values
 447
 448## Cursor Shape
 449
 450- Description: Cursor shape for the default editor.
 451- Setting: `cursor_shape`
 452- Default: `bar`
 453
 454**Options**
 455
 4561. A vertical bar:
 457
 458```json
 459"cursor_shape": "bar"
 460```
 461
 4622. A block that surrounds the following character:
 463
 464```json
 465"cursor_shape": "block"
 466```
 467
 4683. An underline / underscore that runs along the following character:
 469
 470```json
 471"cursor_shape": "underline"
 472```
 473
 4744. An box drawn around the following character:
 475
 476```json
 477"cursor_shape": "hollow"
 478```
 479
 480**Options**
 481
 4821. Position the dock attached to the bottom of the workspace: `bottom`
 4832. Position the dock to the right of the workspace like a side panel: `right`
 4843. Position the dock full screen over the entire workspace: `expanded`
 485
 486## Editor Scrollbar
 487
 488- Description: Whether or not to show the editor scrollbar and various elements in it.
 489- Setting: `scrollbar`
 490- Default:
 491
 492```json
 493"scrollbar": {
 494  "show": "auto",
 495  "cursors": true,
 496  "git_diff": true,
 497  "search_results": true,
 498  "selected_symbol": true,
 499  "diagnostics": true
 500},
 501```
 502
 503### Show Mode
 504
 505- Description: When to show the editor scrollbar.
 506- Setting: `show`
 507- Default: `auto`
 508
 509**Options**
 510
 5111. Show the scrollbar if there's important information or follow the system's configured behavior:
 512
 513```json
 514"scrollbar": {
 515  "show": "auto"
 516}
 517```
 518
 5192. Match the system's configured behavior:
 520
 521```json
 522"scrollbar": {
 523  "show": "system"
 524}
 525```
 526
 5273. Always show the scrollbar:
 528
 529```json
 530"scrollbar": {
 531  "show": "always"
 532}
 533```
 534
 5354. Never show the scrollbar:
 536
 537```json
 538"scrollbar": {
 539  "show": "never"
 540}
 541```
 542
 543### Cursor Indicators
 544
 545- Description: Whether to show cursor positions in the scrollbar.
 546- Setting: `cursors`
 547- Default: `true`
 548
 549**Options**
 550
 551`boolean` values
 552
 553### Git Diff Indicators
 554
 555- Description: Whether to show git diff indicators in the scrollbar.
 556- Setting: `git_diff`
 557- Default: `true`
 558
 559**Options**
 560
 561`boolean` values
 562
 563### Search Results Indicators
 564
 565- Description: Whether to show buffer search results in the scrollbar.
 566- Setting: `search_results`
 567- Default: `true`
 568
 569**Options**
 570
 571`boolean` values
 572
 573### Selected Symbols Indicators
 574
 575- Description: Whether to show selected symbol occurrences in the scrollbar.
 576- Setting: `selected_symbol`
 577- Default: `true`
 578
 579**Options**
 580
 581`boolean` values
 582
 583### Diagnostics
 584
 585- Description: Whether to show diagnostic indicators in the scrollbar.
 586- Setting: `diagnostics`
 587- Default: `true`
 588
 589**Options**
 590
 591`boolean` values
 592
 593## Editor Tab Bar
 594
 595- Description: Settings related to the editor's tab bar.
 596- Settings: `tab_bar`
 597- Default:
 598
 599```json
 600"tab_bar": {
 601  "show": true,
 602  "show_nav_history_buttons": true
 603}
 604```
 605
 606### Show
 607
 608- Description: Whether or not to show the tab bar in the editor.
 609- Setting: `show`
 610- Default: `true`
 611
 612**Options**
 613
 614`boolean` values
 615
 616### Navigation History Buttons
 617
 618- Description: Whether or not to show the navigation history buttons.
 619- Setting: `show_nav_history_buttons`
 620- Default: `true`
 621
 622**Options**
 623
 624`boolean` values
 625
 626## Editor Tabs
 627
 628- Description: Configuration for the editor tabs.
 629- Setting: `tabs`
 630- Default:
 631
 632```json
 633"tabs": {
 634  "close_position": "right",
 635  "file_icons": false,
 636  "git_status": false,
 637  "activate_on_close": "history",
 638  "always_show_close_button": false
 639},
 640```
 641
 642### Close Position
 643
 644- Description: Where to display close button within a tab.
 645- Setting: `close_position`
 646- Default: `right`
 647
 648**Options**
 649
 6501. Display the close button on the right:
 651
 652```json
 653{
 654  "close_position": "right"
 655}
 656```
 657
 6582. Display the close button on the left:
 659
 660```json
 661{
 662  "close_position": "left"
 663}
 664```
 665
 666### File Icons
 667
 668- Description: Whether to show the file icon for a tab.
 669- Setting: `file_icons`
 670- Default: `false`
 671
 672### Git Status
 673
 674- Description: Whether or not to show Git file status in tab.
 675- Setting: `git_status`
 676- Default: `false`
 677
 678### Activate on close
 679
 680- Description: What to do after closing the current tab.
 681- Setting: `activate_on_close`
 682- Default: `history`
 683
 684**Options**
 685
 6861.  Activate the tab that was open previously:
 687
 688```json
 689{
 690  "activate_on_close": "history"
 691}
 692```
 693
 6942. Activate the neighbour tab (prefers the right one, if present):
 695
 696```json
 697{
 698  "activate_on_close": "neighbour"
 699}
 700```
 701
 702### Always show the close button
 703
 704- Description: Whether to always show the close button on tabs.
 705- Setting: `always_show_close_button`
 706- Default: `false`
 707
 708## Editor Toolbar
 709
 710- Description: Whether or not to show various elements in the editor toolbar.
 711- Setting: `toolbar`
 712- Default:
 713
 714```json
 715"toolbar": {
 716  "breadcrumbs": true,
 717  "quick_actions": true
 718},
 719```
 720
 721**Options**
 722
 723Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
 724
 725## Enable Language Server
 726
 727- Description: Whether or not to use language servers to provide code intelligence.
 728- Setting: `enable_language_server`
 729- Default: `true`
 730
 731**Options**
 732
 733`boolean` values
 734
 735## Ensure Final Newline On Save
 736
 737- Description: Whether or not to ensure there's a single newline at the end of a buffer when saving it.
 738- Setting: `ensure_final_newline_on_save`
 739- Default: `true`
 740
 741**Options**
 742
 743`boolean` values
 744
 745## LSP
 746
 747- Description: Configuration for language servers.
 748- Setting: `lsp`
 749- Default: `null`
 750
 751**Options**
 752
 753The following settings can be overridden for specific language servers:
 754
 755- `initialization_options`
 756- `settings`
 757
 758To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
 759
 760Some 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.
 761
 762For example to pass the `check` option to `rust-analyzer`, use the following configuration:
 763
 764```json
 765"lsp": {
 766  "rust-analyzer": {
 767    "initialization_options": {
 768      "check": {
 769        "command": "clippy" // rust-analyzer.check.command (default: "check")
 770      }
 771    }
 772  }
 773}
 774```
 775
 776While other options may be changed at a runtime and should be placed under `settings`:
 777
 778```json
 779"lsp": {
 780  "yaml-language-server": {
 781    "settings": {
 782      "yaml": {
 783        "keyOrdering": true // Enforces alphabetical ordering of keys in maps
 784      }
 785    }
 786  }
 787}
 788```
 789
 790## Format On Save
 791
 792- Description: Whether or not to perform a buffer format before saving.
 793- Setting: `format_on_save`
 794- Default: `on`
 795
 796**Options**
 797
 7981. `on`, enables format on save obeying `formatter` setting:
 799
 800```json
 801{
 802  "format_on_save": "on"
 803}
 804```
 805
 8062. `off`, disables format on save:
 807
 808```json
 809{
 810  "format_on_save": "off"
 811}
 812```
 813
 814## Formatter
 815
 816- Description: How to perform a buffer format.
 817- Setting: `formatter`
 818- Default: `auto`
 819
 820**Options**
 821
 8221. To use the current language server, use `"language_server"`:
 823
 824```json
 825{
 826  "formatter": "language_server"
 827}
 828```
 829
 8302. 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):
 831
 832```json
 833{
 834  "formatter": {
 835    "external": {
 836      "command": "sed",
 837      "arguments": ["-e", "s/ *$//"]
 838    }
 839  }
 840}
 841```
 842
 8433. 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.
 844
 845WARNING: `{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.
 846
 847```json
 848  "formatter": {
 849    "external": {
 850      "command": "prettier",
 851      "arguments": ["--stdin-filepath", "{buffer_path}"]
 852    }
 853  }
 854```
 855
 8564. Or to use code actions provided by the connected language servers, use `"code_actions"`:
 857
 858```json
 859{
 860  "formatter": {
 861    "code_actions": {
 862      // Use ESLint's --fix:
 863      "source.fixAll.eslint": true,
 864      // Organize imports on save:
 865      "source.organizeImports": true
 866    }
 867  }
 868}
 869```
 870
 8715. Or to use multiple formatters consecutively, use an array of formatters:
 872
 873```json
 874{
 875  "formatter": [
 876    {"language_server": {"name": "rust-analyzer"}},
 877    {"external": {
 878      "command": "sed",
 879      "arguments": ["-e", "s/ *$//"]
 880    }
 881  ]
 882}
 883```
 884
 885Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
 886If any of the formatters fails, the subsequent ones will still be executed.
 887
 888## Code Actions On Format
 889
 890- Description: The code actions to perform with the primary language server when formatting the buffer.
 891- Setting: `code_actions_on_format`
 892- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
 893
 894**Examples**
 895
 896<!--
 897TBD: Add Python Ruff source.organizeImports example
 898-->
 899
 9001. Organize imports on format in TypeScript and TSX buffers:
 901
 902```json
 903{
 904  "languages": {
 905    "TypeScript": {
 906      "code_actions_on_format": {
 907        "source.organizeImports": true
 908      }
 909    },
 910    "TSX": {
 911      "code_actions_on_format": {
 912        "source.organizeImports": true
 913      }
 914    }
 915  }
 916}
 917```
 918
 9192. Run ESLint `fixAll` code action when formatting:
 920
 921```json
 922{
 923  "languages": {
 924    "JavaScript": {
 925      "code_actions_on_format": {
 926        "source.fixAll.eslint": true
 927      }
 928    }
 929  }
 930}
 931```
 932
 9333. Run only a single ESLint rule when using `fixAll`:
 934
 935```json
 936{
 937  "languages": {
 938    "JavaScript": {
 939      "code_actions_on_format": {
 940        "source.fixAll.eslint": true
 941      }
 942    }
 943  },
 944  "lsp": {
 945    "eslint": {
 946      "settings": {
 947        "codeActionOnSave": {
 948          "rules": ["import/order"]
 949        }
 950      }
 951    }
 952  }
 953}
 954```
 955
 956## Auto close
 957
 958- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
 959- Setting: `use_autoclose`
 960- Default: `true`
 961
 962**Options**
 963
 964`boolean` values
 965
 966## Always Treat Brackets As Autoclosed
 967
 968- Description: Controls how the editor handles the autoclosed characters.
 969- Setting: `always_treat_brackets_as_autoclosed`
 970- Default: `false`
 971
 972**Options**
 973
 974`boolean` values
 975
 976**Example**
 977
 978If the setting is set to `true`:
 979
 9801. Enter in the editor: `)))`
 9812. Move the cursor to the start: `^)))`
 9823. Enter again: `)))`
 983
 984The result is still `)))` and not `))))))`, which is what it would be by default.
 985
 986## File Scan Exclusions
 987
 988- Setting: `file_scan_exclusions`
 989- Description: Configure how Add filename or directory globs that will be excluded by Zed entirely. They will be skipped during file scans, file searches and hidden from project file tree.
 990- Default:
 991
 992```json
 993"file_scan_exclusions": [
 994  "**/.git",
 995  "**/.svn",
 996  "**/.hg",
 997  "**/CVS",
 998  "**/.DS_Store",
 999  "**/Thumbs.db",
1000  "**/.classpath",
1001  "**/.settings"
1002],
1003```
1004
1005Note, 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.
1006
1007## File Types
1008
1009- Setting: `file_types`
1010- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1011- Default: `{}`
1012
1013**Examples**
1014
1015To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1016
1017```json
1018{
1019  "file_types": {
1020    "C++": ["c"],
1021    "TOML": ["MyLockFile"],
1022    "Dockerfile": ["Dockerfile*"]
1023  }
1024}
1025```
1026
1027## Git
1028
1029- Description: Configuration for git-related features.
1030- Setting: `git`
1031- Default:
1032
1033```json
1034{
1035  "git": {
1036    "git_gutter": "tracked_files",
1037    "inline_blame": {
1038      "enabled": true
1039    }
1040  }
1041}
1042```
1043
1044### Git Gutter
1045
1046- Description: Whether or not to show the git gutter.
1047- Setting: `git_gutter`
1048- Default: `tracked_files`
1049
1050**Options**
1051
10521. Show git gutter in tracked files
1053
1054```json
1055{
1056  "git": {
1057    "git_gutter": "tracked_files"
1058  }
1059}
1060```
1061
10622. Hide git gutter
1063
1064```json
1065{
1066  "git": {
1067    "git_gutter": "hide"
1068  }
1069}
1070```
1071
1072### Inline Git Blame
1073
1074- Description: Whether or not to show git blame information inline, on the currently focused line.
1075- Setting: `inline_blame`
1076- Default:
1077
1078```json
1079{
1080  "git": {
1081    "inline_blame": {
1082      "enabled": true
1083    }
1084  }
1085}
1086```
1087
1088**Options**
1089
10901. Disable inline git blame:
1091
1092```json
1093{
1094  "git": {
1095    "inline_blame": {
1096      "enabled": false
1097    }
1098  }
1099}
1100```
1101
11022. Only show inline git blame after a delay (that starts after cursor stops moving):
1103
1104```json
1105{
1106  "git": {
1107    "inline_blame": {
1108      "enabled": true,
1109      "delay_ms": 500
1110    }
1111  }
1112}
1113```
1114
11153. Show a commit summary next to the commit date and author:
1116
1117```json
1118{
1119  "git": {
1120    "inline_blame": {
1121      "enabled": true,
1122      "show_commit_summary": true
1123    }
1124  }
1125}
1126```
1127
11284. Use this as the minimum column at which to display inline blame information:
1129
1130```json
1131{
1132  "git": {
1133    "inline_blame": {
1134      "enabled": true,
1135      "min_column": 80
1136    }
1137  }
1138}
1139```
1140
1141## Indent Guides
1142
1143- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
1144- Setting: `indent_guides`
1145- Default:
1146
1147```json
1148{
1149  "indent_guides": {
1150    "enabled": true,
1151    "line_width": 1,
1152    "active_line_width": 1,
1153    "coloring": "fixed",
1154    "background_coloring": "disabled"
1155  }
1156}
1157```
1158
1159**Options**
1160
11611. Disable indent guides
1162
1163```json
1164{
1165  "indent_guides": {
1166    "enabled": false
1167  }
1168}
1169```
1170
11712. Enable indent guides for a specific language.
1172
1173```json
1174{
1175  "languages": {
1176    "Python": {
1177      "indent_guides": {
1178        "enabled": true
1179      }
1180    }
1181  }
1182}
1183```
1184
11853. Enable indent aware coloring ("rainbow indentation").
1186   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.
1187
1188```json
1189{
1190  "indent_guides": {
1191    "enabled": true,
1192    "coloring": "indent_aware"
1193  }
1194}
1195```
1196
11974. Enable indent aware background coloring ("rainbow indentation").
1198   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.
1199
1200```json
1201{
1202  "indent_guides": {
1203    "enabled": true,
1204    "coloring": "indent_aware",
1205    "background_coloring": "indent_aware"
1206  }
1207}
1208```
1209
1210## Hard Tabs
1211
1212- Description: Whether to indent lines using tab characters or multiple spaces.
1213- Setting: `hard_tabs`
1214- Default: `false`
1215
1216**Options**
1217
1218`boolean` values
1219
1220## Hover Popover Enabled
1221
1222- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
1223- Setting: `hover_popover_enabled`
1224- Default: `true`
1225
1226**Options**
1227
1228`boolean` values
1229
1230## Inlay hints
1231
1232- Description: Configuration for displaying extra text with hints in the editor.
1233- Setting: `inlay_hints`
1234- Default:
1235
1236```json
1237"inlay_hints": {
1238  "enabled": false,
1239  "show_type_hints": true,
1240  "show_parameter_hints": true,
1241  "show_other_hints": true,
1242  "show_background": false,
1243  "edit_debounce_ms": 700,
1244  "scroll_debounce_ms": 50
1245}
1246```
1247
1248**Options**
1249
1250Inlay hints querying consists of two parts: editor (client) and LSP server.
1251With 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.
1252At 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.
1253
1254The following languages have inlay hints preconfigured by Zed:
1255
1256- [Go](https://docs.zed.dev/languages/go)
1257- [Rust](https://docs.zed.dev/languages/rust)
1258- [Svelte](https://docs.zed.dev/languages/svelte)
1259- [Typescript](https://docs.zed.dev/languages/typescript)
1260
1261Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
1262
1263Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
1264Settings-related hint updates are not debounced.
1265
1266## Journal
1267
1268- Description: Configuration for the journal.
1269- Setting: `journal`
1270- Default:
1271
1272```json
1273"journal": {
1274  "path": "~",
1275  "hour_format": "hour12"
1276}
1277```
1278
1279### Path
1280
1281- Description: The path of the directory where journal entries are stored.
1282- Setting: `path`
1283- Default: `~`
1284
1285**Options**
1286
1287`string` values
1288
1289### Hour Format
1290
1291- Description: The format to use for displaying hours in the journal.
1292- Setting: `hour_format`
1293- Default: `hour12`
1294
1295**Options**
1296
12971. 12-hour format:
1298
1299```json
1300{
1301  "hour_format": "hour12"
1302}
1303```
1304
13052. 24-hour format:
1306
1307```json
1308{
1309  "hour_format": "hour24"
1310}
1311```
1312
1313## Languages
1314
1315- Description: Configuration for specific languages.
1316- Setting: `languages`
1317- Default: `null`
1318
1319**Options**
1320
1321To override settings for a language, add an entry for that languages name to the `languages` value. Example:
1322
1323```json
1324"languages": {
1325  "C": {
1326    "format_on_save": "off",
1327    "preferred_line_length": 64,
1328    "soft_wrap": "preferred_line_length"
1329  },
1330  "JSON": {
1331    "tab_size": 4
1332  }
1333}
1334```
1335
1336The following settings can be overridden for each specific language:
1337
1338- `enable_language_server`
1339- `ensure_final_newline_on_save`
1340- `format_on_save`
1341- `formatter`
1342- `hard_tabs`
1343- `preferred_line_length`
1344- `remove_trailing_whitespace_on_save`
1345- `show_inline_completions`
1346- `show_whitespaces`
1347- `soft_wrap`
1348- `tab_size`
1349- `use_autoclose`
1350- `always_treat_brackets_as_autoclosed`
1351
1352These values take in the same options as the root-level settings with the same name.
1353
1354## Network Proxy
1355
1356- Description: Configure a network proxy for Zed.
1357- Setting: `proxy`
1358- Default: `null`
1359
1360**Options**
1361
1362The proxy setting must contain a URL to the proxy.
1363
1364The following URI schemes are supported:
1365
1366- `http`
1367- `https`
1368- `socks4` - SOCKS4 proxy with local DNS
1369- `socks4a` - SOCKS4 proxy with remote DNS
1370- `socks5` - SOCKS5 proxy with local DNS
1371- `socks5h` - SOCKS5 proxy with remote DNS
1372
1373`http` will be used when no scheme is specified.
1374
1375By 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`.
1376
1377For example, to set an `http` proxy, add the following to your settings:
1378
1379```json
1380{
1381  "proxy": "http://127.0.0.1:10809"
1382}
1383```
1384
1385Or to set a `socks5` proxy:
1386
1387```json
1388{
1389  "proxy": "socks5h://localhost:10808"
1390}
1391```
1392
1393## Preview tabs
1394
1395- Description:
1396  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. \
1397   There are several ways to convert a preview tab into a regular tab:
1398
1399  - Double-clicking on the file
1400  - Double-clicking on the tab header
1401  - Using the `project_panel::OpenPermanent` action
1402  - Editing the file
1403  - Dragging the file to a different pane
1404
1405- Setting: `preview_tabs`
1406- Default:
1407
1408```json
1409"preview_tabs": {
1410  "enabled": true,
1411  "enable_preview_from_file_finder": false,
1412  "enable_preview_from_code_navigation": false,
1413}
1414```
1415
1416### Enable preview from file finder
1417
1418- Description: Determines whether to open files in preview mode when selected from the file finder.
1419- Setting: `enable_preview_from_file_finder`
1420- Default: `false`
1421
1422**Options**
1423
1424`boolean` values
1425
1426### Enable preview from code navigation
1427
1428- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
1429- Setting: `enable_preview_from_code_navigation`
1430- Default: `false`
1431
1432**Options**
1433
1434`boolean` values
1435
1436## File Finder
1437
1438### Modal Max Width
1439
1440- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
1441- Setting: `max_modal_width`
1442- Default: `small`
1443
1444## Preferred Line Length
1445
1446- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
1447- Setting: `preferred_line_length`
1448- Default: `80`
1449
1450**Options**
1451
1452`integer` values
1453
1454## Projects Online By Default
1455
1456- Description: Whether or not to show the online projects view by default.
1457- Setting: `projects_online_by_default`
1458- Default: `true`
1459
1460**Options**
1461
1462`boolean` values
1463
1464## Remove Trailing Whitespace On Save
1465
1466- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
1467- Setting: `remove_trailing_whitespace_on_save`
1468- Default: `true`
1469
1470**Options**
1471
1472`boolean` values
1473
1474## Search
1475
1476- Description: Search options to enable by default when opening new project and buffer searches.
1477- Setting: `search`
1478- Default:
1479
1480```json
1481"search": {
1482  "whole_word": false,
1483  "case_sensitive": false,
1484  "include_ignored": false,
1485  "regex": false
1486},
1487```
1488
1489## Show Call Status Icon
1490
1491- Description: Whether or not to show the call status icon in the status bar.
1492- Setting: `show_call_status_icon`
1493- Default: `true`
1494
1495**Options**
1496
1497`boolean` values
1498
1499## Show Completions On Input
1500
1501- Description: Whether or not to show completions as you type.
1502- Setting: `show_completions_on_input`
1503- Default: `true`
1504
1505**Options**
1506
1507`boolean` values
1508
1509## Show Completion Documentation
1510
1511- Description: Whether to display inline and alongside documentation for items in the completions menu.
1512- Setting: `show_completion_documentation`
1513- Default: `true`
1514
1515**Options**
1516
1517`boolean` values
1518
1519## Completion Documentation Debounce Delay
1520
1521- Description: The debounce delay before re-querying the language server for completion documentation when not included in original completion list.
1522- Setting: `completion_documentation_secondary_query_debounce`
1523- Default: `300` ms
1524
1525**Options**
1526
1527`integer` values
1528
1529## Show Inline Completions
1530
1531- Description: Whether to show inline completions as you type or manually by triggering `editor::ShowInlineCompletion`.
1532- Setting: `show_inline_completions`
1533- Default: `true`
1534
1535**Options**
1536
1537`boolean` values
1538
1539## Show Whitespaces
1540
1541- Description: Whether or not to show render whitespace characters in the editor.
1542- Setting: `show_whitespaces`
1543- Default: `selection`
1544
1545**Options**
1546
15471. `all`
15482. `selection`
15493. `none`
15504. `boundary`
1551
1552## Soft Wrap
1553
1554- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
1555- Setting: `soft_wrap`
1556- Default: `none`
1557
1558**Options**
1559
15601. `none` to avoid wrapping generally, unless the line is too long
15612. `prefer_line` (deprecated, same as `none`)
15623. `editor_width` to wrap lines that overflow the editor width
15634. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
1564
1565## Wrap Guides (Vertical Rulers)
1566
1567- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
1568- Setting: `wrap_guides`
1569- Default: []
1570
1571**Options**
1572
1573List of `integer` column numbers
1574
1575## Tab Size
1576
1577- Description: The number of spaces to use for each tab character.
1578- Setting: `tab_size`
1579- Default: `4`
1580
1581**Options**
1582
1583`integer` values
1584
1585## Telemetry
1586
1587- Description: Control what info is collected by Zed.
1588- Setting: `telemetry`
1589- Default:
1590
1591```json
1592"telemetry": {
1593  "diagnostics": true,
1594  "metrics": true
1595},
1596```
1597
1598**Options**
1599
1600### Diagnostics
1601
1602- Description: Setting for sending debug-related data, such as crash reports.
1603- Setting: `diagnostics`
1604- Default: `true`
1605
1606**Options**
1607
1608`boolean` values
1609
1610### Metrics
1611
1612- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
1613- Setting: `metrics`
1614- Default: `true`
1615
1616**Options**
1617
1618`boolean` values
1619
1620## Terminal
1621
1622- Description: Configuration for the terminal.
1623- Setting: `terminal`
1624- Default:
1625
1626```json
1627{
1628  "terminal": {
1629    "alternate_scroll": "off",
1630    "blinking": "terminal_controlled",
1631    "copy_on_select": false,
1632    "dock": "bottom",
1633    "detect_venv": {
1634      "on": {
1635        "directories": [".env", "env", ".venv", "venv"],
1636        "activate_script": "default"
1637      }
1638    },
1639    "env": {},
1640    "font_family": null,
1641    "font_features": null,
1642    "font_size": null,
1643    "line_height": "comfortable",
1644    "option_as_meta": false,
1645    "button": false,
1646    "shell": {},
1647    "toolbar": {
1648      "breadcrumbs": true
1649    },
1650    "working_directory": "current_project_directory"
1651  }
1652}
1653```
1654
1655### Terminal: Dock
1656
1657- Description: Control the position of the dock
1658- Setting: `dock`
1659- Default: `bottom`
1660
1661**Options**
1662
1663`"bottom"`, `"left"` or `"right"`
1664
1665### Terminal: Alternate Scroll
1666
1667- 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.
1668- Setting: `alternate_scroll`
1669- Default: `off`
1670
1671**Options**
1672
16731. Default alternate scroll mode to on
1674
1675```json
1676{
1677  "terminal": {
1678    "alternate_scroll": "on"
1679  }
1680}
1681```
1682
16832. Default alternate scroll mode to off
1684
1685```json
1686{
1687  "terminal": {
1688    "alternate_scroll": "off"
1689  }
1690}
1691```
1692
1693### Terminal: Blinking
1694
1695- Description: Set the cursor blinking behavior in the terminal
1696- Setting: `blinking`
1697- Default: `terminal_controlled`
1698
1699**Options**
1700
17011. Never blink the cursor, ignore the terminal mode
1702
1703```json
1704{
1705  "terminal": {
1706    "blinking": "off"
1707  }
1708}
1709```
1710
17112. Default the cursor blink to off, but allow the terminal to turn blinking on
1712
1713```json
1714{
1715  "terminal": {
1716    "blinking": "terminal_controlled"
1717  }
1718}
1719```
1720
17213. Always blink the cursor, ignore the terminal mode
1722
1723```json
1724{
1725  "terminal": {
1726    "blinking": "on"
1727  }
1728}
1729```
1730
1731### Terminal: Copy On Select
1732
1733- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
1734- Setting: `copy_on_select`
1735- Default: `false`
1736
1737**Options**
1738
1739`boolean` values
1740
1741**Example**
1742
1743```json
1744{
1745  "terminal": {
1746    "copy_on_select": true
1747  }
1748}
1749```
1750
1751### Terminal: Env
1752
1753- 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
1754- Setting: `env`
1755- Default: `{}`
1756
1757**Example**
1758
1759```json
1760{
1761  "terminal": {
1762    "env": {
1763      "ZED": "1",
1764      "KEY": "value1:value2"
1765    }
1766  }
1767}
1768```
1769
1770### Terminal: Font Size
1771
1772- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
1773- Setting: `font_size`
1774- Default: `null`
1775
1776**Options**
1777
1778`integer` values
1779
1780```json
1781{
1782  "terminal": {
1783    "font_size": 15
1784  }
1785}
1786```
1787
1788### Terminal: Font Family
1789
1790- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
1791- Setting: `font_family`
1792- Default: `null`
1793
1794**Options**
1795
1796The name of any font family installed on the user's system
1797
1798```json
1799{
1800  "terminal": {
1801    "font_family": "Berkeley Mono"
1802  }
1803}
1804```
1805
1806### Terminal: Font Features
1807
1808- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
1809- Setting: `font_features`
1810- Default: `null`
1811- Platform: macOS and Windows.
1812
1813**Options**
1814
1815See Buffer Font Features
1816
1817```json
1818{
1819  "terminal": {
1820    "font_features": {
1821      "calt": false
1822      // See Buffer Font Features for more features
1823    }
1824  }
1825}
1826```
1827
1828### Terminal: Line Height
1829
1830- Description: Set the terminal's line height.
1831- Setting: `line_height`
1832- Default: `comfortable`
1833
1834**Options**
1835
18361. Use a line height that's `comfortable` for reading, 1.618. (default)
1837
1838```json
1839{
1840  "terminal": {
1841    "line_height": "comfortable"
1842  }
1843}
1844```
1845
18462. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
1847
1848```json
1849{
1850  "terminal": {
1851    "line_height": "standard"
1852  }
1853}
1854```
1855
18563.  Use a custom line height.
1857
1858```json
1859{
1860  "terminal": {
1861    "line_height": {
1862      "custom": 2
1863    }
1864  }
1865}
1866```
1867
1868### Terminal: Option As Meta
1869
1870- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
1871- Setting: `option_as_meta`
1872- Default: `false`
1873
1874**Options**
1875
1876`boolean` values
1877
1878```json
1879{
1880  "terminal": {
1881    "option_as_meta": true
1882  }
1883}
1884```
1885
1886### Terminal: Shell
1887
1888- Description: What shell to use when launching the terminal.
1889- Setting: `shell`
1890- Default: `system`
1891
1892**Options**
1893
18941. Use the system's default terminal configuration (usually the `/etc/passwd` file).
1895
1896```json
1897{
1898  "terminal": {
1899    "shell": "system"
1900  }
1901}
1902```
1903
19042. A program to launch:
1905
1906```json
1907{
1908  "terminal": {
1909    "shell": {
1910      "program": "sh"
1911    }
1912  }
1913}
1914```
1915
19163. A program with arguments:
1917
1918```json
1919{
1920  "terminal": {
1921    "shell": {
1922      "with_arguments": {
1923        "program": "/bin/bash",
1924        "args": ["--login"]
1925      }
1926    }
1927  }
1928}
1929```
1930
1931## Terminal: Detect Virtual Environments {#terminal-detect_venv}
1932
1933- 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.
1934- Setting: `detect_venv`
1935- Default:
1936
1937```json
1938{
1939  "terminal": {
1940    "detect_venv": {
1941      "on": {
1942        // Default directories to search for virtual environments, relative
1943        // to the current working directory. We recommend overriding this
1944        // in your project's settings, rather than globally.
1945        "directories": [".venv", "venv"],
1946        // Can also be `csh`, `fish`, and `nushell`
1947        "activate_script": "default"
1948      }
1949    }
1950  }
1951}
1952```
1953
1954Disable with:
1955
1956```json
1957{
1958  "terminal": {
1959    "detect_venv": "off"
1960  }
1961}
1962```
1963
1964## Terminal: Toolbar
1965
1966- Description: Whether or not to show various elements in the terminal toolbar.
1967- Setting: `toolbar`
1968- Default:
1969
1970```json
1971{
1972  "terminal": {
1973    "toolbar": {
1974      "breadcrumbs": true
1975    }
1976  }
1977}
1978```
1979
1980**Options**
1981
1982At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
1983
1984If the terminal title is empty, the breadcrumbs won't be shown.
1985
1986The shell running in the terminal needs to be configured to emit the title.
1987
1988Example command to set the title: `echo -e "\e]2;New Title\007";`
1989
1990### Terminal: Button
1991
1992- Description: Control to show or hide the terminal button in the status bar
1993- Setting: `button`
1994- Default: `true`
1995
1996**Options**
1997
1998`boolean` values
1999
2000```json
2001{
2002  "terminal": {
2003    "button": false
2004  }
2005}
2006```
2007
2008### Terminal: Working Directory
2009
2010- Description: What working directory to use when launching the terminal.
2011- Setting: `working_directory`
2012- Default: `"current_project_directory"`
2013
2014**Options**
2015
20161. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
2017
2018```json
2019{
2020  "terminal": {
2021    "working_directory": "current_project_directory"
2022  }
2023}
2024```
2025
20262. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
2027
2028```json
2029{
2030  "terminal": {
2031    "working_directory": "first_project_directory"
2032  }
2033}
2034```
2035
20363. Always use this platform's home directory (if we can find it)
2037
2038```json
2039{
2040  "terminal": {
2041    "working_directory": "always_home"
2042  }
2043}
2044```
2045
20464. 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.
2047
2048```json
2049{
2050  "terminal": {
2051    "working_directory": {
2052      "always": {
2053        "directory": "~/zed/projects/"
2054      }
2055    }
2056  }
2057}
2058```
2059
2060## Theme
2061
2062- 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.
2063- Setting: `theme`
2064- Default: `One Dark`
2065
2066### Theme Object
2067
2068- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2069- Setting: `theme`
2070- Default:
2071
2072```json
2073"theme": {
2074  "mode": "system",
2075  "dark": "One Dark",
2076  "light": "One Light"
2077},
2078```
2079
2080### Mode
2081
2082- Description: Specify theme mode.
2083- Setting: `mode`
2084- Default: `system`
2085
2086**Options**
2087
20881. Set the theme to dark mode
2089
2090```json
2091{
2092  "mode": "dark"
2093}
2094```
2095
20962. Set the theme to light mode
2097
2098```json
2099{
2100  "mode": "light"
2101}
2102```
2103
21043. Set the theme to system mode
2105
2106```json
2107{
2108  "mode": "system"
2109}
2110```
2111
2112### Dark
2113
2114- Description: The name of the dark Zed theme to use for the UI.
2115- Setting: `dark`
2116- Default: `One Dark`
2117
2118**Options**
2119
2120Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2121
2122### Light
2123
2124- Description: The name of the light Zed theme to use for the UI.
2125- Setting: `light`
2126- Default: `One Light`
2127
2128**Options**
2129
2130Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2131
2132## Vim
2133
2134- Description: Whether or not to enable vim mode (work in progress).
2135- Setting: `vim_mode`
2136- Default: `false`
2137
2138## Project Panel
2139
2140- Description: Customize project panel
2141- Setting: `project_panel`
2142- Default:
2143
2144```json
2145{
2146  "project_panel": {
2147    "button": true,
2148    "default_width": 240,
2149    "dock": "left",
2150    "file_icons": true,
2151    "folder_icons": true,
2152    "git_status": true,
2153    "indent_size": 20,
2154    "indent_guides": true,
2155    "auto_reveal_entries": true,
2156    "auto_fold_dirs": true,
2157    "scrollbar": {
2158      "show": null
2159    },
2160    "indent_guides": {
2161      "show": "always"
2162    }
2163  }
2164}
2165```
2166
2167### Dock
2168
2169- Description: Control the position of the dock
2170- Setting: `dock`
2171- Default: `left`
2172
2173**Options**
2174
21751. Default dock position to left
2176
2177```json
2178{
2179  "dock": "left"
2180}
2181```
2182
21832. Default dock position to right
2184
2185```json
2186{
2187  "dock": "right"
2188}
2189```
2190
2191### Git Status
2192
2193- Description: Indicates newly created and updated files
2194- Setting: `git_status`
2195- Default: `true`
2196
2197**Options**
2198
21991. Default enable git status
2200
2201```json
2202{
2203  "git_status": true
2204}
2205```
2206
22072. Default disable git status
2208
2209```json
2210{
2211  "git_status": false
2212}
2213```
2214
2215### Default Width
2216
2217- Description: Customize default width taken by project panel
2218- Setting: `default_width`
2219- Default: N/A width in pixels (eg: 420)
2220
2221**Options**
2222
2223`boolean` values
2224
2225### Auto Reveal Entries
2226
2227- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
2228- Setting: `auto_reveal_entries`
2229- Default: `true`
2230
2231**Options**
2232
22331. Enable auto reveal entries
2234
2235```json
2236{
2237  "auto_reveal_entries": true
2238}
2239```
2240
22412. Disable auto reveal entries
2242
2243```json
2244{
2245  "auto_reveal_entries": false
2246}
2247```
2248
2249### Auto Fold Dirs
2250
2251- Description: Whether to fold directories automatically when directory has only one directory inside.
2252- Setting: `auto_fold_dirs`
2253- Default: `true`
2254
2255**Options**
2256
22571. Enable auto fold dirs
2258
2259```json
2260{
2261  "auto_fold_dirs": true
2262}
2263```
2264
22652. Disable auto fold dirs
2266
2267```json
2268{
2269  "auto_fold_dirs": false
2270}
2271```
2272
2273### Indent Size
2274
2275- Description: Amount of indentation (in pixels) for nested items.
2276- Setting: `indent_size`
2277- Default: `20`
2278
2279### Indent Guides: Show
2280
2281- Description: Whether to show indent guides in the project panel. Possible values: "always", "never".
2282- Setting: `indent_guides`
2283
2284```json
2285"indent_guides": {
2286  "show": "always"
2287}
2288```
2289
2290**Options**
2291
22921. Show indent guides in the project panel
2293
2294```json
2295{
2296  "indent_guides": {
2297    "show": "always"
2298  }
2299}
2300```
2301
23022. Hide indent guides in the project panel
2303
2304```json
2305{
2306  "indent_guides": {
2307    "show": "never"
2308  }
2309}
2310```
2311
2312### Scrollbar: Show
2313
2314- 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.
2315- Setting: `scrollbar`
2316- Default:
2317
2318```json
2319"scrollbar": {
2320  "show": null
2321}
2322```
2323
2324**Options**
2325
23261. Show scrollbar in the project panel
2327
2328```json
2329{
2330  "scrollbar": {
2331    "show": "always"
2332  }
2333}
2334```
2335
23362. Hide scrollbar in the project panel
2337
2338```json
2339{
2340  "scrollbar": {
2341    "show": "never"
2342  }
2343}
2344```
2345
2346## Assistant Panel
2347
2348- Description: Customize assistant panel
2349- Setting: `assistant`
2350- Default:
2351
2352```json
2353"assistant": {
2354  "enabled": true,
2355  "button": true,
2356  "dock": "right",
2357  "default_width": 640,
2358  "default_height": 320,
2359  "provider": "openai",
2360  "version": "1",
2361},
2362```
2363
2364## Outline Panel
2365
2366- Description: Customize outline Panel
2367- Setting: `outline_panel`
2368- Default:
2369
2370```json
2371"outline_panel": {
2372  "button": true,
2373  "default_width": 240,
2374  "dock": "left",
2375  "file_icons": true,
2376  "folder_icons": true,
2377  "git_status": true,
2378  "indent_size": 20,
2379  "auto_reveal_entries": true,
2380  "auto_fold_dirs": true,
2381  "indent_guides": {
2382    "show": "always"
2383  },
2384  "scrollbar": {
2385    "show": null
2386  }
2387}
2388```
2389
2390## Calls
2391
2392- Description: Customize behavior when participating in a call
2393- Setting: `calls`
2394- Default:
2395
2396```json
2397"calls": {
2398  // Join calls with the microphone live by default
2399  "mute_on_join": false,
2400  // Share your project when you are the first to join a channel
2401  "share_on_join": false
2402},
2403```
2404
2405## Unnecessary Code Fade
2406
2407- Description: How much to fade out unused code.
2408- Setting: `unnecessary_code_fade`
2409- Default: `0.3`
2410
2411**Options**
2412
2413Float values between `0.0` and `0.9`, where:
2414
2415- `0.0` means no fading (unused code looks the same as used code)
2416- `0.9` means maximum fading (unused code is very faint but still visible)
2417
2418**Example**
2419
2420```json
2421{
2422  "unnecessary_code_fade": 0.5
2423}
2424```
2425
2426## UI Font Family
2427
2428- Description: The name of the font to use for text in the UI.
2429- Setting: `ui_font_family`
2430- Default: `Zed Plex Sans`
2431
2432**Options**
2433
2434The name of any font family installed on the system.
2435
2436## UI Font Features
2437
2438- Description: The OpenType features to enable for text in the UI.
2439- Setting: `ui_font_features`
2440- Default: `null`
2441- Platform: macOS and Windows.
2442
2443**Options**
2444
2445Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
2446
2447For example, to disable font ligatures, add the following to your settings:
2448
2449```json
2450{
2451  "ui_font_features": {
2452    "calt": false
2453  }
2454}
2455```
2456
2457You can also set other OpenType features, like setting `cv01` to `7`:
2458
2459```json
2460{
2461  "ui_font_features": {
2462    "cv01": 7
2463  }
2464}
2465```
2466
2467## UI Font Fallbacks
2468
2469- Description: The font fallbacks to use for text in the UI.
2470- Setting: `ui_font_fallbacks`
2471- Default: `null`
2472- Platform: macOS and Windows.
2473
2474**Options**
2475
2476For example, to use `Nerd Font` as a fallback, add the following to your settings:
2477
2478```json
2479{
2480  "ui_font_fallbacks": ["Nerd Font"]
2481}
2482```
2483
2484## UI Font Size
2485
2486- Description: The default font size for text in the UI.
2487- Setting: `ui_font_size`
2488- Default: `16`
2489
2490**Options**
2491
2492`integer` values from `6` to `100` pixels (inclusive)
2493
2494## UI Font Weight
2495
2496- Description: The default font weight for text in the UI.
2497- Setting: `ui_font_weight`
2498- Default: `400`
2499
2500**Options**
2501
2502`integer` values between `100` and `900`
2503
2504## An example configuration:
2505
2506```json
2507// ~/.config/zed/settings.json
2508{
2509  "theme": "cave-light",
2510  "tab_size": 2,
2511  "preferred_line_length": 80,
2512  "soft_wrap": "none",
2513
2514  "buffer_font_size": 18,
2515  "buffer_font_family": "Zed Plex Mono",
2516
2517  "autosave": "on_focus_change",
2518  "format_on_save": "off",
2519  "vim_mode": false,
2520  "projects_online_by_default": true,
2521  "terminal": {
2522    "font_family": "FiraCode Nerd Font Mono",
2523    "blinking": "off"
2524  },
2525  "languages": {
2526    "C": {
2527      "format_on_save": "language_server",
2528      "preferred_line_length": 64,
2529      "soft_wrap": "preferred_line_length"
2530    }
2531  }
2532}
2533```