configuring-zed.md

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