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