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    {
1001      "external": {
1002        "command": "sed",
1003        "arguments": ["-e", "s/ *$//"]
1004      }
1005    }
1006  ]
1007}
1008```
1009
1010Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1011If any of the formatters fails, the subsequent ones will still be executed.
1012
1013## Code Actions On Format
1014
1015- Description: The code actions to perform with the primary language server when formatting the buffer.
1016- Setting: `code_actions_on_format`
1017- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
1018
1019**Examples**
1020
1021<!--
1022TBD: Add Python Ruff source.organizeImports example
1023-->
1024
10251. Organize imports on format in TypeScript and TSX buffers:
1026
1027```json
1028{
1029  "languages": {
1030    "TypeScript": {
1031      "code_actions_on_format": {
1032        "source.organizeImports": true
1033      }
1034    },
1035    "TSX": {
1036      "code_actions_on_format": {
1037        "source.organizeImports": true
1038      }
1039    }
1040  }
1041}
1042```
1043
10442. Run ESLint `fixAll` code action when formatting:
1045
1046```json
1047{
1048  "languages": {
1049    "JavaScript": {
1050      "code_actions_on_format": {
1051        "source.fixAll.eslint": true
1052      }
1053    }
1054  }
1055}
1056```
1057
10583. Run only a single ESLint rule when using `fixAll`:
1059
1060```json
1061{
1062  "languages": {
1063    "JavaScript": {
1064      "code_actions_on_format": {
1065        "source.fixAll.eslint": true
1066      }
1067    }
1068  },
1069  "lsp": {
1070    "eslint": {
1071      "settings": {
1072        "codeActionOnSave": {
1073          "rules": ["import/order"]
1074        }
1075      }
1076    }
1077  }
1078}
1079```
1080
1081## Auto close
1082
1083- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1084- Setting: `use_autoclose`
1085- Default: `true`
1086
1087**Options**
1088
1089`boolean` values
1090
1091## Always Treat Brackets As Autoclosed
1092
1093- Description: Controls how the editor handles the autoclosed characters.
1094- Setting: `always_treat_brackets_as_autoclosed`
1095- Default: `false`
1096
1097**Options**
1098
1099`boolean` values
1100
1101**Example**
1102
1103If the setting is set to `true`:
1104
11051. Enter in the editor: `)))`
11062. Move the cursor to the start: `^)))`
11073. Enter again: `)))`
1108
1109The result is still `)))` and not `))))))`, which is what it would be by default.
1110
1111## File Scan Exclusions
1112
1113- Setting: `file_scan_exclusions`
1114- 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.
1115- Default:
1116
1117```json
1118"file_scan_exclusions": [
1119  "**/.git",
1120  "**/.svn",
1121  "**/.hg",
1122  "**/.jj",
1123  "**/CVS",
1124  "**/.DS_Store",
1125  "**/Thumbs.db",
1126  "**/.classpath",
1127  "**/.settings"
1128],
1129```
1130
1131Note, 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.
1132
1133## File Types
1134
1135- Setting: `file_types`
1136- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1137- Default: `{}`
1138
1139**Examples**
1140
1141To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1142
1143```json
1144{
1145  "file_types": {
1146    "C++": ["c"],
1147    "TOML": ["MyLockFile"],
1148    "Dockerfile": ["Dockerfile*"]
1149  }
1150}
1151```
1152
1153## Git
1154
1155- Description: Configuration for git-related features.
1156- Setting: `git`
1157- Default:
1158
1159```json
1160{
1161  "git": {
1162    "git_gutter": "tracked_files",
1163    "inline_blame": {
1164      "enabled": true
1165    }
1166  }
1167}
1168```
1169
1170### Git Gutter
1171
1172- Description: Whether or not to show the git gutter.
1173- Setting: `git_gutter`
1174- Default: `tracked_files`
1175
1176**Options**
1177
11781. Show git gutter in tracked files
1179
1180```json
1181{
1182  "git": {
1183    "git_gutter": "tracked_files"
1184  }
1185}
1186```
1187
11882. Hide git gutter
1189
1190```json
1191{
1192  "git": {
1193    "git_gutter": "hide"
1194  }
1195}
1196```
1197
1198### Inline Git Blame
1199
1200- Description: Whether or not to show git blame information inline, on the currently focused line.
1201- Setting: `inline_blame`
1202- Default:
1203
1204```json
1205{
1206  "git": {
1207    "inline_blame": {
1208      "enabled": true
1209    }
1210  }
1211}
1212```
1213
1214**Options**
1215
12161. Disable inline git blame:
1217
1218```json
1219{
1220  "git": {
1221    "inline_blame": {
1222      "enabled": false
1223    }
1224  }
1225}
1226```
1227
12282. Only show inline git blame after a delay (that starts after cursor stops moving):
1229
1230```json
1231{
1232  "git": {
1233    "inline_blame": {
1234      "enabled": true,
1235      "delay_ms": 500
1236    }
1237  }
1238}
1239```
1240
12413. Show a commit summary next to the commit date and author:
1242
1243```json
1244{
1245  "git": {
1246    "inline_blame": {
1247      "enabled": true,
1248      "show_commit_summary": true
1249    }
1250  }
1251}
1252```
1253
12544. Use this as the minimum column at which to display inline blame information:
1255
1256```json
1257{
1258  "git": {
1259    "inline_blame": {
1260      "enabled": true,
1261      "min_column": 80
1262    }
1263  }
1264}
1265```
1266
1267## Indent Guides
1268
1269- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
1270- Setting: `indent_guides`
1271- Default:
1272
1273```json
1274{
1275  "indent_guides": {
1276    "enabled": true,
1277    "line_width": 1,
1278    "active_line_width": 1,
1279    "coloring": "fixed",
1280    "background_coloring": "disabled"
1281  }
1282}
1283```
1284
1285**Options**
1286
12871. Disable indent guides
1288
1289```json
1290{
1291  "indent_guides": {
1292    "enabled": false
1293  }
1294}
1295```
1296
12972. Enable indent guides for a specific language.
1298
1299```json
1300{
1301  "languages": {
1302    "Python": {
1303      "indent_guides": {
1304        "enabled": true
1305      }
1306    }
1307  }
1308}
1309```
1310
13113. Enable indent aware coloring ("rainbow indentation").
1312   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.
1313
1314```json
1315{
1316  "indent_guides": {
1317    "enabled": true,
1318    "coloring": "indent_aware"
1319  }
1320}
1321```
1322
13234. Enable indent aware background coloring ("rainbow indentation").
1324   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.
1325
1326```json
1327{
1328  "indent_guides": {
1329    "enabled": true,
1330    "coloring": "indent_aware",
1331    "background_coloring": "indent_aware"
1332  }
1333}
1334```
1335
1336## Hard Tabs
1337
1338- Description: Whether to indent lines using tab characters or multiple spaces.
1339- Setting: `hard_tabs`
1340- Default: `false`
1341
1342**Options**
1343
1344`boolean` values
1345
1346## Hover Popover Enabled
1347
1348- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
1349- Setting: `hover_popover_enabled`
1350- Default: `true`
1351
1352**Options**
1353
1354`boolean` values
1355
1356## Inlay hints
1357
1358- Description: Configuration for displaying extra text with hints in the editor.
1359- Setting: `inlay_hints`
1360- Default:
1361
1362```json
1363"inlay_hints": {
1364  "enabled": false,
1365  "show_type_hints": true,
1366  "show_parameter_hints": true,
1367  "show_other_hints": true,
1368  "show_background": false,
1369  "edit_debounce_ms": 700,
1370  "scroll_debounce_ms": 50
1371}
1372```
1373
1374**Options**
1375
1376Inlay hints querying consists of two parts: editor (client) and LSP server.
1377With 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.
1378At 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.
1379
1380The following languages have inlay hints preconfigured by Zed:
1381
1382- [Go](https://docs.zed.dev/languages/go)
1383- [Rust](https://docs.zed.dev/languages/rust)
1384- [Svelte](https://docs.zed.dev/languages/svelte)
1385- [Typescript](https://docs.zed.dev/languages/typescript)
1386
1387Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
1388
1389Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
1390Settings-related hint updates are not debounced.
1391
1392## Journal
1393
1394- Description: Configuration for the journal.
1395- Setting: `journal`
1396- Default:
1397
1398```json
1399"journal": {
1400  "path": "~",
1401  "hour_format": "hour12"
1402}
1403```
1404
1405### Path
1406
1407- Description: The path of the directory where journal entries are stored.
1408- Setting: `path`
1409- Default: `~`
1410
1411**Options**
1412
1413`string` values
1414
1415### Hour Format
1416
1417- Description: The format to use for displaying hours in the journal.
1418- Setting: `hour_format`
1419- Default: `hour12`
1420
1421**Options**
1422
14231. 12-hour format:
1424
1425```json
1426{
1427  "hour_format": "hour12"
1428}
1429```
1430
14312. 24-hour format:
1432
1433```json
1434{
1435  "hour_format": "hour24"
1436}
1437```
1438
1439## Languages
1440
1441- Description: Configuration for specific languages.
1442- Setting: `languages`
1443- Default: `null`
1444
1445**Options**
1446
1447To override settings for a language, add an entry for that languages name to the `languages` value. Example:
1448
1449```json
1450"languages": {
1451  "C": {
1452    "format_on_save": "off",
1453    "preferred_line_length": 64,
1454    "soft_wrap": "preferred_line_length"
1455  },
1456  "JSON": {
1457    "tab_size": 4
1458  }
1459}
1460```
1461
1462The following settings can be overridden for each specific language:
1463
1464- [`enable_language_server`](#enable-language-server)
1465- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
1466- [`format_on_save`](#format-on-save)
1467- [`formatter`](#formatter)
1468- [`hard_tabs`](#hard-tabs)
1469- [`preferred_line_length`](#preferred-line-length)
1470- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
1471- [`show_inline_completions`](#show-inline-completions)
1472- [`show_whitespaces`](#show-whitespaces)
1473- [`soft_wrap`](#soft-wrap)
1474- [`tab_size`](#tab-size)
1475- [`use_autoclose`](#use-autoclose)
1476- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
1477
1478These values take in the same options as the root-level settings with the same name.
1479
1480## Network Proxy
1481
1482- Description: Configure a network proxy for Zed.
1483- Setting: `proxy`
1484- Default: `null`
1485
1486**Options**
1487
1488The proxy setting must contain a URL to the proxy.
1489
1490The following URI schemes are supported:
1491
1492- `http`
1493- `https`
1494- `socks4` - SOCKS4 proxy with local DNS
1495- `socks4a` - SOCKS4 proxy with remote DNS
1496- `socks5` - SOCKS5 proxy with local DNS
1497- `socks5h` - SOCKS5 proxy with remote DNS
1498
1499`http` will be used when no scheme is specified.
1500
1501By 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`.
1502
1503For example, to set an `http` proxy, add the following to your settings:
1504
1505```json
1506{
1507  "proxy": "http://127.0.0.1:10809"
1508}
1509```
1510
1511Or to set a `socks5` proxy:
1512
1513```json
1514{
1515  "proxy": "socks5h://localhost:10808"
1516}
1517```
1518
1519## Preview tabs
1520
1521- Description:
1522  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. \
1523   There are several ways to convert a preview tab into a regular tab:
1524
1525  - Double-clicking on the file
1526  - Double-clicking on the tab header
1527  - Using the `project_panel::OpenPermanent` action
1528  - Editing the file
1529  - Dragging the file to a different pane
1530
1531- Setting: `preview_tabs`
1532- Default:
1533
1534```json
1535"preview_tabs": {
1536  "enabled": true,
1537  "enable_preview_from_file_finder": false,
1538  "enable_preview_from_code_navigation": false,
1539}
1540```
1541
1542### Enable preview from file finder
1543
1544- Description: Determines whether to open files in preview mode when selected from the file finder.
1545- Setting: `enable_preview_from_file_finder`
1546- Default: `false`
1547
1548**Options**
1549
1550`boolean` values
1551
1552### Enable preview from code navigation
1553
1554- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
1555- Setting: `enable_preview_from_code_navigation`
1556- Default: `false`
1557
1558**Options**
1559
1560`boolean` values
1561
1562## File Finder
1563
1564### Modal Max Width
1565
1566- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
1567- Setting: `max_modal_width`
1568- Default: `small`
1569
1570## Preferred Line Length
1571
1572- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
1573- Setting: `preferred_line_length`
1574- Default: `80`
1575
1576**Options**
1577
1578`integer` values
1579
1580## Projects Online By Default
1581
1582- Description: Whether or not to show the online projects view by default.
1583- Setting: `projects_online_by_default`
1584- Default: `true`
1585
1586**Options**
1587
1588`boolean` values
1589
1590## Remove Trailing Whitespace On Save
1591
1592- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
1593- Setting: `remove_trailing_whitespace_on_save`
1594- Default: `true`
1595
1596**Options**
1597
1598`boolean` values
1599
1600## Search
1601
1602- Description: Search options to enable by default when opening new project and buffer searches.
1603- Setting: `search`
1604- Default:
1605
1606```json
1607"search": {
1608  "whole_word": false,
1609  "case_sensitive": false,
1610  "include_ignored": false,
1611  "regex": false
1612},
1613```
1614
1615## Show Call Status Icon
1616
1617- Description: Whether or not to show the call status icon in the status bar.
1618- Setting: `show_call_status_icon`
1619- Default: `true`
1620
1621**Options**
1622
1623`boolean` values
1624
1625## Show Completions On Input
1626
1627- Description: Whether or not to show completions as you type.
1628- Setting: `show_completions_on_input`
1629- Default: `true`
1630
1631**Options**
1632
1633`boolean` values
1634
1635## Show Completion Documentation
1636
1637- Description: Whether to display inline and alongside documentation for items in the completions menu.
1638- Setting: `show_completion_documentation`
1639- Default: `true`
1640
1641**Options**
1642
1643`boolean` values
1644
1645## Show Inline Completions
1646
1647- Description: Whether to show inline completions as you type or manually by triggering `editor::ShowInlineCompletion`.
1648- Setting: `show_inline_completions`
1649- Default: `true`
1650
1651**Options**
1652
1653`boolean` values
1654
1655## Show Whitespaces
1656
1657- Description: Whether or not to show render whitespace characters in the editor.
1658- Setting: `show_whitespaces`
1659- Default: `selection`
1660
1661**Options**
1662
16631. `all`
16642. `selection`
16653. `none`
16664. `boundary`
1667
1668## Soft Wrap
1669
1670- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
1671- Setting: `soft_wrap`
1672- Default: `none`
1673
1674**Options**
1675
16761. `none` to avoid wrapping generally, unless the line is too long
16772. `prefer_line` (deprecated, same as `none`)
16783. `editor_width` to wrap lines that overflow the editor width
16794. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
16805. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
1681
1682## Wrap Guides (Vertical Rulers)
1683
1684- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
1685- Setting: `wrap_guides`
1686- Default: []
1687
1688**Options**
1689
1690List of `integer` column numbers
1691
1692## Tab Size
1693
1694- Description: The number of spaces to use for each tab character.
1695- Setting: `tab_size`
1696- Default: `4`
1697
1698**Options**
1699
1700`integer` values
1701
1702## Telemetry
1703
1704- Description: Control what info is collected by Zed.
1705- Setting: `telemetry`
1706- Default:
1707
1708```json
1709"telemetry": {
1710  "diagnostics": true,
1711  "metrics": true
1712},
1713```
1714
1715**Options**
1716
1717### Diagnostics
1718
1719- Description: Setting for sending debug-related data, such as crash reports.
1720- Setting: `diagnostics`
1721- Default: `true`
1722
1723**Options**
1724
1725`boolean` values
1726
1727### Metrics
1728
1729- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
1730- Setting: `metrics`
1731- Default: `true`
1732
1733**Options**
1734
1735`boolean` values
1736
1737## Terminal
1738
1739- Description: Configuration for the terminal.
1740- Setting: `terminal`
1741- Default:
1742
1743```json
1744{
1745  "terminal": {
1746    "alternate_scroll": "off",
1747    "blinking": "terminal_controlled",
1748    "copy_on_select": false,
1749    "dock": "bottom",
1750    "detect_venv": {
1751      "on": {
1752        "directories": [".env", "env", ".venv", "venv"],
1753        "activate_script": "default"
1754      }
1755    },
1756    "env": {},
1757    "font_family": null,
1758    "font_features": null,
1759    "font_size": null,
1760    "line_height": "comfortable",
1761    "option_as_meta": false,
1762    "button": false,
1763    "shell": {},
1764    "toolbar": {
1765      "breadcrumbs": true
1766    },
1767    "working_directory": "current_project_directory"
1768  }
1769}
1770```
1771
1772### Terminal: Dock
1773
1774- Description: Control the position of the dock
1775- Setting: `dock`
1776- Default: `bottom`
1777
1778**Options**
1779
1780`"bottom"`, `"left"` or `"right"`
1781
1782### Terminal: Alternate Scroll
1783
1784- 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.
1785- Setting: `alternate_scroll`
1786- Default: `off`
1787
1788**Options**
1789
17901. Default alternate scroll mode to on
1791
1792```json
1793{
1794  "terminal": {
1795    "alternate_scroll": "on"
1796  }
1797}
1798```
1799
18002. Default alternate scroll mode to off
1801
1802```json
1803{
1804  "terminal": {
1805    "alternate_scroll": "off"
1806  }
1807}
1808```
1809
1810### Terminal: Blinking
1811
1812- Description: Set the cursor blinking behavior in the terminal
1813- Setting: `blinking`
1814- Default: `terminal_controlled`
1815
1816**Options**
1817
18181. Never blink the cursor, ignore the terminal mode
1819
1820```json
1821{
1822  "terminal": {
1823    "blinking": "off"
1824  }
1825}
1826```
1827
18282. Default the cursor blink to off, but allow the terminal to turn blinking on
1829
1830```json
1831{
1832  "terminal": {
1833    "blinking": "terminal_controlled"
1834  }
1835}
1836```
1837
18383. Always blink the cursor, ignore the terminal mode
1839
1840```json
1841{
1842  "terminal": {
1843    "blinking": "on"
1844  }
1845}
1846```
1847
1848### Terminal: Copy On Select
1849
1850- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
1851- Setting: `copy_on_select`
1852- Default: `false`
1853
1854**Options**
1855
1856`boolean` values
1857
1858**Example**
1859
1860```json
1861{
1862  "terminal": {
1863    "copy_on_select": true
1864  }
1865}
1866```
1867
1868### Terminal: Env
1869
1870- 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
1871- Setting: `env`
1872- Default: `{}`
1873
1874**Example**
1875
1876```json
1877{
1878  "terminal": {
1879    "env": {
1880      "ZED": "1",
1881      "KEY": "value1:value2"
1882    }
1883  }
1884}
1885```
1886
1887### Terminal: Font Size
1888
1889- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
1890- Setting: `font_size`
1891- Default: `null`
1892
1893**Options**
1894
1895`integer` values
1896
1897```json
1898{
1899  "terminal": {
1900    "font_size": 15
1901  }
1902}
1903```
1904
1905### Terminal: Font Family
1906
1907- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
1908- Setting: `font_family`
1909- Default: `null`
1910
1911**Options**
1912
1913The name of any font family installed on the user's system
1914
1915```json
1916{
1917  "terminal": {
1918    "font_family": "Berkeley Mono"
1919  }
1920}
1921```
1922
1923### Terminal: Font Features
1924
1925- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
1926- Setting: `font_features`
1927- Default: `null`
1928- Platform: macOS and Windows.
1929
1930**Options**
1931
1932See Buffer Font Features
1933
1934```json
1935{
1936  "terminal": {
1937    "font_features": {
1938      "calt": false
1939      // See Buffer Font Features for more features
1940    }
1941  }
1942}
1943```
1944
1945### Terminal: Line Height
1946
1947- Description: Set the terminal's line height.
1948- Setting: `line_height`
1949- Default: `comfortable`
1950
1951**Options**
1952
19531. Use a line height that's `comfortable` for reading, 1.618. (default)
1954
1955```json
1956{
1957  "terminal": {
1958    "line_height": "comfortable"
1959  }
1960}
1961```
1962
19632. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
1964
1965```json
1966{
1967  "terminal": {
1968    "line_height": "standard"
1969  }
1970}
1971```
1972
19733.  Use a custom line height.
1974
1975```json
1976{
1977  "terminal": {
1978    "line_height": {
1979      "custom": 2
1980    }
1981  }
1982}
1983```
1984
1985### Terminal: Option As Meta
1986
1987- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
1988- Setting: `option_as_meta`
1989- Default: `false`
1990
1991**Options**
1992
1993`boolean` values
1994
1995```json
1996{
1997  "terminal": {
1998    "option_as_meta": true
1999  }
2000}
2001```
2002
2003### Terminal: Shell
2004
2005- Description: What shell to use when launching the terminal.
2006- Setting: `shell`
2007- Default: `system`
2008
2009**Options**
2010
20111. Use the system's default terminal configuration (usually the `/etc/passwd` file).
2012
2013```json
2014{
2015  "terminal": {
2016    "shell": "system"
2017  }
2018}
2019```
2020
20212. A program to launch:
2022
2023```json
2024{
2025  "terminal": {
2026    "shell": {
2027      "program": "sh"
2028    }
2029  }
2030}
2031```
2032
20333. A program with arguments:
2034
2035```json
2036{
2037  "terminal": {
2038    "shell": {
2039      "with_arguments": {
2040        "program": "/bin/bash",
2041        "args": ["--login"]
2042      }
2043    }
2044  }
2045}
2046```
2047
2048## Terminal: Detect Virtual Environments {#terminal-detect_venv}
2049
2050- 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.
2051- Setting: `detect_venv`
2052- Default:
2053
2054```json
2055{
2056  "terminal": {
2057    "detect_venv": {
2058      "on": {
2059        // Default directories to search for virtual environments, relative
2060        // to the current working directory. We recommend overriding this
2061        // in your project's settings, rather than globally.
2062        "directories": [".venv", "venv"],
2063        // Can also be `csh`, `fish`, and `nushell`
2064        "activate_script": "default"
2065      }
2066    }
2067  }
2068}
2069```
2070
2071Disable with:
2072
2073```json
2074{
2075  "terminal": {
2076    "detect_venv": "off"
2077  }
2078}
2079```
2080
2081## Terminal: Toolbar
2082
2083- Description: Whether or not to show various elements in the terminal toolbar.
2084- Setting: `toolbar`
2085- Default:
2086
2087```json
2088{
2089  "terminal": {
2090    "toolbar": {
2091      "breadcrumbs": true
2092    }
2093  }
2094}
2095```
2096
2097**Options**
2098
2099At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
2100
2101If the terminal title is empty, the breadcrumbs won't be shown.
2102
2103The shell running in the terminal needs to be configured to emit the title.
2104
2105Example command to set the title: `echo -e "\e]2;New Title\007";`
2106
2107### Terminal: Button
2108
2109- Description: Control to show or hide the terminal button in the status bar
2110- Setting: `button`
2111- Default: `true`
2112
2113**Options**
2114
2115`boolean` values
2116
2117```json
2118{
2119  "terminal": {
2120    "button": false
2121  }
2122}
2123```
2124
2125### Terminal: Working Directory
2126
2127- Description: What working directory to use when launching the terminal.
2128- Setting: `working_directory`
2129- Default: `"current_project_directory"`
2130
2131**Options**
2132
21331. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
2134
2135```json
2136{
2137  "terminal": {
2138    "working_directory": "current_project_directory"
2139  }
2140}
2141```
2142
21432. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
2144
2145```json
2146{
2147  "terminal": {
2148    "working_directory": "first_project_directory"
2149  }
2150}
2151```
2152
21533. Always use this platform's home directory (if we can find it)
2154
2155```json
2156{
2157  "terminal": {
2158    "working_directory": "always_home"
2159  }
2160}
2161```
2162
21634. 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.
2164
2165```json
2166{
2167  "terminal": {
2168    "working_directory": {
2169      "always": {
2170        "directory": "~/zed/projects/"
2171      }
2172    }
2173  }
2174}
2175```
2176
2177## Theme
2178
2179- 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.
2180- Setting: `theme`
2181- Default: `One Dark`
2182
2183### Theme Object
2184
2185- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2186- Setting: `theme`
2187- Default:
2188
2189```json
2190"theme": {
2191  "mode": "system",
2192  "dark": "One Dark",
2193  "light": "One Light"
2194},
2195```
2196
2197### Mode
2198
2199- Description: Specify theme mode.
2200- Setting: `mode`
2201- Default: `system`
2202
2203**Options**
2204
22051. Set the theme to dark mode
2206
2207```json
2208{
2209  "mode": "dark"
2210}
2211```
2212
22132. Set the theme to light mode
2214
2215```json
2216{
2217  "mode": "light"
2218}
2219```
2220
22213. Set the theme to system mode
2222
2223```json
2224{
2225  "mode": "system"
2226}
2227```
2228
2229### Dark
2230
2231- Description: The name of the dark Zed theme to use for the UI.
2232- Setting: `dark`
2233- Default: `One Dark`
2234
2235**Options**
2236
2237Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2238
2239### Light
2240
2241- Description: The name of the light Zed theme to use for the UI.
2242- Setting: `light`
2243- Default: `One Light`
2244
2245**Options**
2246
2247Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2248
2249## Vim
2250
2251- Description: Whether or not to enable vim mode (work in progress).
2252- Setting: `vim_mode`
2253- Default: `false`
2254
2255## Project Panel
2256
2257- Description: Customize project panel
2258- Setting: `project_panel`
2259- Default:
2260
2261```json
2262{
2263  "project_panel": {
2264    "button": true,
2265    "default_width": 240,
2266    "dock": "left",
2267    "entry_spacing": "comfortable",
2268    "file_icons": true,
2269    "folder_icons": true,
2270    "git_status": true,
2271    "indent_size": 20,
2272    "indent_guides": true,
2273    "auto_reveal_entries": true,
2274    "auto_fold_dirs": true,
2275    "scrollbar": {
2276      "show": null
2277    },
2278    "indent_guides": {
2279      "show": "always"
2280    }
2281  }
2282}
2283```
2284
2285### Dock
2286
2287- Description: Control the position of the dock
2288- Setting: `dock`
2289- Default: `left`
2290
2291**Options**
2292
22931. Default dock position to left
2294
2295```json
2296{
2297  "dock": "left"
2298}
2299```
2300
23012. Default dock position to right
2302
2303```json
2304{
2305  "dock": "right"
2306}
2307```
2308
2309### Entry Spacing
2310
2311- Description: Spacing between worktree entries
2312- Setting: `entry_spacing`
2313- Default: `comfortable`
2314
2315**Options**
2316
23171. Comfortable entry spacing
2318
2319```json
2320{
2321  "entry_spacing": "comfortable"
2322}
2323```
2324
23252. Standard entry spacing
2326
2327```json
2328{
2329  "entry_spacing": "standard"
2330}
2331```
2332
2333### Git Status
2334
2335- Description: Indicates newly created and updated files
2336- Setting: `git_status`
2337- Default: `true`
2338
2339**Options**
2340
23411. Default enable git status
2342
2343```json
2344{
2345  "git_status": true
2346}
2347```
2348
23492. Default disable git status
2350
2351```json
2352{
2353  "git_status": false
2354}
2355```
2356
2357### Default Width
2358
2359- Description: Customize default width taken by project panel
2360- Setting: `default_width`
2361- Default: N/A width in pixels (eg: 420)
2362
2363**Options**
2364
2365`boolean` values
2366
2367### Auto Reveal Entries
2368
2369- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
2370- Setting: `auto_reveal_entries`
2371- Default: `true`
2372
2373**Options**
2374
23751. Enable auto reveal entries
2376
2377```json
2378{
2379  "auto_reveal_entries": true
2380}
2381```
2382
23832. Disable auto reveal entries
2384
2385```json
2386{
2387  "auto_reveal_entries": false
2388}
2389```
2390
2391### Auto Fold Dirs
2392
2393- Description: Whether to fold directories automatically when directory has only one directory inside.
2394- Setting: `auto_fold_dirs`
2395- Default: `true`
2396
2397**Options**
2398
23991. Enable auto fold dirs
2400
2401```json
2402{
2403  "auto_fold_dirs": true
2404}
2405```
2406
24072. Disable auto fold dirs
2408
2409```json
2410{
2411  "auto_fold_dirs": false
2412}
2413```
2414
2415### Indent Size
2416
2417- Description: Amount of indentation (in pixels) for nested items.
2418- Setting: `indent_size`
2419- Default: `20`
2420
2421### Indent Guides: Show
2422
2423- Description: Whether to show indent guides in the project panel. Possible values: "always", "never".
2424- Setting: `indent_guides`
2425
2426```json
2427"indent_guides": {
2428  "show": "always"
2429}
2430```
2431
2432**Options**
2433
24341. Show indent guides in the project panel
2435
2436```json
2437{
2438  "indent_guides": {
2439    "show": "always"
2440  }
2441}
2442```
2443
24442. Hide indent guides in the project panel
2445
2446```json
2447{
2448  "indent_guides": {
2449    "show": "never"
2450  }
2451}
2452```
2453
2454### Scrollbar: Show
2455
2456- 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.
2457- Setting: `scrollbar`
2458- Default:
2459
2460```json
2461"scrollbar": {
2462  "show": null
2463}
2464```
2465
2466**Options**
2467
24681. Show scrollbar in the project panel
2469
2470```json
2471{
2472  "scrollbar": {
2473    "show": "always"
2474  }
2475}
2476```
2477
24782. Hide scrollbar in the project panel
2479
2480```json
2481{
2482  "scrollbar": {
2483    "show": "never"
2484  }
2485}
2486```
2487
2488## Assistant Panel
2489
2490- Description: Customize assistant panel
2491- Setting: `assistant`
2492- Default:
2493
2494```json
2495"assistant": {
2496  "enabled": true,
2497  "button": true,
2498  "dock": "right",
2499  "default_width": 640,
2500  "default_height": 320,
2501  "provider": "openai",
2502  "version": "1",
2503},
2504```
2505
2506## Outline Panel
2507
2508- Description: Customize outline Panel
2509- Setting: `outline_panel`
2510- Default:
2511
2512```json
2513"outline_panel": {
2514  "button": true,
2515  "default_width": 240,
2516  "dock": "left",
2517  "file_icons": true,
2518  "folder_icons": true,
2519  "git_status": true,
2520  "indent_size": 20,
2521  "auto_reveal_entries": true,
2522  "auto_fold_dirs": true,
2523  "indent_guides": {
2524    "show": "always"
2525  },
2526  "scrollbar": {
2527    "show": null
2528  }
2529}
2530```
2531
2532## Calls
2533
2534- Description: Customize behavior when participating in a call
2535- Setting: `calls`
2536- Default:
2537
2538```json
2539"calls": {
2540  // Join calls with the microphone live by default
2541  "mute_on_join": false,
2542  // Share your project when you are the first to join a channel
2543  "share_on_join": false
2544},
2545```
2546
2547## Unnecessary Code Fade
2548
2549- Description: How much to fade out unused code.
2550- Setting: `unnecessary_code_fade`
2551- Default: `0.3`
2552
2553**Options**
2554
2555Float values between `0.0` and `0.9`, where:
2556
2557- `0.0` means no fading (unused code looks the same as used code)
2558- `0.9` means maximum fading (unused code is very faint but still visible)
2559
2560**Example**
2561
2562```json
2563{
2564  "unnecessary_code_fade": 0.5
2565}
2566```
2567
2568## UI Font Family
2569
2570- Description: The name of the font to use for text in the UI.
2571- Setting: `ui_font_family`
2572- Default: `Zed Plex Sans`
2573
2574**Options**
2575
2576The name of any font family installed on the system.
2577
2578## UI Font Features
2579
2580- Description: The OpenType features to enable for text in the UI.
2581- Setting: `ui_font_features`
2582- Default: `null`
2583- Platform: macOS and Windows.
2584
2585**Options**
2586
2587Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
2588
2589For example, to disable font ligatures, add the following to your settings:
2590
2591```json
2592{
2593  "ui_font_features": {
2594    "calt": false
2595  }
2596}
2597```
2598
2599You can also set other OpenType features, like setting `cv01` to `7`:
2600
2601```json
2602{
2603  "ui_font_features": {
2604    "cv01": 7
2605  }
2606}
2607```
2608
2609## UI Font Fallbacks
2610
2611- Description: The font fallbacks to use for text in the UI.
2612- Setting: `ui_font_fallbacks`
2613- Default: `null`
2614- Platform: macOS and Windows.
2615
2616**Options**
2617
2618For example, to use `Nerd Font` as a fallback, add the following to your settings:
2619
2620```json
2621{
2622  "ui_font_fallbacks": ["Nerd Font"]
2623}
2624```
2625
2626## UI Font Size
2627
2628- Description: The default font size for text in the UI.
2629- Setting: `ui_font_size`
2630- Default: `16`
2631
2632**Options**
2633
2634`integer` values from `6` to `100` pixels (inclusive)
2635
2636## UI Font Weight
2637
2638- Description: The default font weight for text in the UI.
2639- Setting: `ui_font_weight`
2640- Default: `400`
2641
2642**Options**
2643
2644`integer` values between `100` and `900`
2645
2646## An example configuration:
2647
2648```json
2649// ~/.config/zed/settings.json
2650{
2651  "theme": "cave-light",
2652  "tab_size": 2,
2653  "preferred_line_length": 80,
2654  "soft_wrap": "none",
2655
2656  "buffer_font_size": 18,
2657  "buffer_font_family": "Zed Plex Mono",
2658
2659  "autosave": "on_focus_change",
2660  "format_on_save": "off",
2661  "vim_mode": false,
2662  "projects_online_by_default": true,
2663  "terminal": {
2664    "font_family": "FiraCode Nerd Font Mono",
2665    "blinking": "off"
2666  },
2667  "languages": {
2668    "C": {
2669      "format_on_save": "language_server",
2670      "preferred_line_length": 64,
2671      "soft_wrap": "preferred_line_length"
2672    }
2673  }
2674}
2675```