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