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## Agent Font Size
 108
 109- Description: The font size for text in the agent panel. Inherits the UI font size if unset.
 110- Setting: `agent_font_size`
 111- Default: `null`
 112
 113**Options**
 114
 115`integer` values from `6` to `100` pixels (inclusive)
 116
 117## Allow Rewrap
 118
 119- Description: Controls where the {#action editor::Rewrap} action is allowed in the current language scope
 120- Setting: `allow_rewrap`
 121- Default: `"in_comments"`
 122
 123**Options**
 124
 1251. Allow rewrap in comments only:
 126
 127```json
 128{
 129  "allow_rewrap": "in_comments"
 130}
 131```
 132
 1332. Allow rewrap everywhere:
 134
 135```json
 136{
 137  "allow_rewrap": "everywhere"
 138}
 139```
 140
 1413. Never allow rewrap:
 142
 143```json
 144{
 145  "allow_rewrap": "never"
 146}
 147```
 148
 149Note: This setting has no effect in Vim mode, as rewrap is already allowed everywhere.
 150
 151## Auto Indent
 152
 153- Description: Whether indentation should be adjusted based on the context whilst typing. This can be specified on a per-language basis.
 154- Setting: `auto_indent`
 155- Default: `true`
 156
 157**Options**
 158
 159`boolean` values
 160
 161## Auto Indent On Paste
 162
 163- Description: Whether indentation of pasted content should be adjusted based on the context
 164- Setting: `auto_indent_on_paste`
 165- Default: `true`
 166
 167**Options**
 168
 169`boolean` values
 170
 171## Auto Install extensions
 172
 173- Description: Define extensions to be autoinstalled or never be installed.
 174- Setting: `auto_install_extension`
 175- Default: `{ "html": true }`
 176
 177**Options**
 178
 179You can find the names of your currently installed extensions by listing the subfolders under the [extension installation location](./extensions/installing-extensions.md#installation-location):
 180
 181On macOS:
 182
 183```sh
 184ls ~/Library/Application\ Support/Zed/extensions/installed/
 185```
 186
 187On Linux:
 188
 189```sh
 190ls ~/.local/share/zed/extensions/installed
 191```
 192
 193Define extensions which should be installed (`true`) or never installed (`false`).
 194
 195```json
 196{
 197  "auto_install_extensions": {
 198    "html": true,
 199    "dockerfile": true,
 200    "docker-compose": false
 201  }
 202}
 203```
 204
 205## Autosave
 206
 207- Description: When to automatically save edited buffers.
 208- Setting: `autosave`
 209- Default: `off`
 210
 211**Options**
 212
 2131. To disable autosave, set it to `off`:
 214
 215```json
 216{
 217  "autosave": "off"
 218}
 219```
 220
 2212. To autosave when focus changes, use `on_focus_change`:
 222
 223```json
 224{
 225  "autosave": "on_focus_change"
 226}
 227```
 228
 2293. To autosave when the active window changes, use `on_window_change`:
 230
 231```json
 232{
 233  "autosave": "on_window_change"
 234}
 235```
 236
 2374. To autosave after an inactivity period, use `after_delay`:
 238
 239```json
 240{
 241  "autosave": {
 242    "after_delay": {
 243      "milliseconds": 1000
 244    }
 245  }
 246}
 247```
 248
 249## Autoscroll on Clicks
 250
 251- Description: Whether to scroll when clicking near the edge of the visible text area.
 252- Setting: `autoscroll_on_clicks`
 253- Default: `false`
 254
 255**Options**
 256
 257`boolean` values
 258
 259## Auto Signature Help
 260
 261- Description: Show method signatures in the editor, when inside parentheses
 262- Setting: `auto_signature_help`
 263- Default: `false`
 264
 265**Options**
 266
 267`boolean` values
 268
 269### Show Signature Help After Edits
 270
 271- Description: Whether to show the signature help after completion or a bracket pair inserted. If `auto_signature_help` is enabled, this setting will be treated as enabled also.
 272- Setting: `show_signature_help_after_edits`
 273- Default: `false`
 274
 275**Options**
 276
 277`boolean` values
 278
 279## Auto Update
 280
 281- Description: Whether or not to automatically check for updates.
 282- Setting: `auto_update`
 283- Default: `true`
 284
 285**Options**
 286
 287`boolean` values
 288
 289## Base Keymap
 290
 291- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
 292- Setting: `base_keymap`
 293- Default: `VSCode`
 294
 295**Options**
 296
 2971. VS Code
 298
 299```json
 300{
 301  "base_keymap": "VSCode"
 302}
 303```
 304
 3052. Atom
 306
 307```json
 308{
 309  "base_keymap": "Atom"
 310}
 311```
 312
 3133. JetBrains
 314
 315```json
 316{
 317  "base_keymap": "JetBrains"
 318}
 319```
 320
 3214. None
 322
 323```json
 324{
 325  "base_keymap": "None"
 326}
 327```
 328
 3295. Sublime Text
 330
 331```json
 332{
 333  "base_keymap": "SublimeText"
 334}
 335```
 336
 3376. TextMate
 338
 339```json
 340{
 341  "base_keymap": "TextMate"
 342}
 343```
 344
 345## Buffer Font Family
 346
 347- Description: The name of a font to use for rendering text in the editor.
 348- Setting: `buffer_font_family`
 349- Default: `.ZedMono`. This currently aliases to [Lilex](https://lilex.myrt.co).
 350
 351**Options**
 352
 353The name of any font family installed on the user's system, or `".ZedMono"`.
 354
 355## Buffer Font Features
 356
 357- Description: The OpenType features to enable for text in the editor.
 358- Setting: `buffer_font_features`
 359- Default: `null`
 360- Platform: macOS and Windows.
 361
 362**Options**
 363
 364Zed 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.
 365
 366For example, to disable font ligatures, add the following to your settings:
 367
 368```json
 369{
 370  "buffer_font_features": {
 371    "calt": false
 372  }
 373}
 374```
 375
 376You can also set other OpenType features, like setting `cv01` to `7`:
 377
 378```json
 379{
 380  "buffer_font_features": {
 381    "cv01": 7
 382  }
 383}
 384```
 385
 386## Buffer Font Fallbacks
 387
 388- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
 389- Setting: `buffer_font_fallbacks`
 390- Default: `null`
 391- Platform: macOS and Windows.
 392
 393**Options**
 394
 395For example, to use `Nerd Font` as a fallback, add the following to your settings:
 396
 397```json
 398{
 399  "buffer_font_fallbacks": ["Nerd Font"]
 400}
 401```
 402
 403## Buffer Font Size
 404
 405- Description: The default font size for text in the editor.
 406- Setting: `buffer_font_size`
 407- Default: `15`
 408
 409**Options**
 410
 411`integer` values from `6` to `100` pixels (inclusive)
 412
 413## Buffer Font Weight
 414
 415- Description: The default font weight for text in the editor.
 416- Setting: `buffer_font_weight`
 417- Default: `400`
 418
 419**Options**
 420
 421`integer` values between `100` and `900`
 422
 423## Buffer Line Height
 424
 425- Description: The default line height for text in the editor.
 426- Setting: `buffer_line_height`
 427- Default: `"comfortable"`
 428
 429**Options**
 430
 431`"standard"`, `"comfortable"` or `{ "custom": float }` (`1` is compact, `2` is loose)
 432
 433## Centered Layout
 434
 435- Description: Configuration for the centered layout mode.
 436- Setting: `centered_layout`
 437- Default:
 438
 439```json
 440"centered_layout": {
 441  "left_padding": 0.2,
 442  "right_padding": 0.2,
 443}
 444```
 445
 446**Options**
 447
 448The `left_padding` and `right_padding` options define the relative width of the
 449left 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`.
 450
 451## Close on File Delete
 452
 453- Description: Whether to automatically close editor tabs when their corresponding files are deleted from disk.
 454- Setting: `close_on_file_delete`
 455- Default: `false`
 456
 457**Options**
 458
 459`boolean` values
 460
 461When 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.
 462
 463Note: Dirty files (files with unsaved changes) will not be automatically closed even when this setting is enabled, ensuring you don't lose unsaved work.
 464
 465## Confirm Quit
 466
 467- Description: Whether or not to prompt the user to confirm before closing the application.
 468- Setting: `confirm_quit`
 469- Default: `false`
 470
 471**Options**
 472
 473`boolean` values
 474
 475## Diagnostics Max Severity
 476
 477- Description: Which level to use to filter out diagnostics displayed in the editor
 478- Setting: `diagnostics_max_severity`
 479- Default: `null`
 480
 481**Options**
 482
 4831. Allow all diagnostics (default):
 484
 485```json
 486{
 487  "diagnostics_max_severity": null
 488}
 489```
 490
 4912. Show only errors:
 492
 493```json
 494{
 495  "diagnostics_max_severity": "error"
 496}
 497```
 498
 4993. Show errors and warnings:
 500
 501```json
 502{
 503  "diagnostics_max_severity": "warning"
 504}
 505```
 506
 5074. Show errors, warnings, and information:
 508
 509```json
 510{
 511  "diagnostics_max_severity": "information"
 512}
 513```
 514
 5155. Show all including hints:
 516
 517```json
 518{
 519  "diagnostics_max_severity": "hint"
 520}
 521```
 522
 523## Disable AI
 524
 525- Description: Whether to disable all AI features in Zed
 526- Setting: `disable_ai`
 527- Default: `false`
 528
 529**Options**
 530
 531`boolean` values
 532
 533## Direnv Integration
 534
 535- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
 536  `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.
 537  It also allows for those environment variables to be used in tasks.
 538- Setting: `load_direnv`
 539- Default: `"direct"`
 540
 541**Options**
 542
 543There are two options to choose from:
 544
 5451. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
 5462. `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.
 547
 548## Double Click In Multibuffer
 549
 550- Description: What to do when multibuffer is double clicked in some of its excerpts (parts of singleton buffers)
 551- Setting: `double_click_in_multibuffer`
 552- Default: `"select"`
 553
 554**Options**
 555
 5561. Behave as a regular buffer and select the whole word (default):
 557
 558```json
 559{
 560  "double_click_in_multibuffer": "select"
 561}
 562```
 563
 5642. Open the excerpt clicked as a new buffer in the new tab:
 565
 566```json
 567{
 568  "double_click_in_multibuffer": "open"
 569}
 570```
 571
 572For the case of "open", regular selection behavior can be achieved by holding `alt` when double clicking.
 573
 574## Drop Target Size
 575
 576- Description: Relative size of the drop target in the editor that will open dropped file as a split pane (0-0.5). For example, 0.25 means if you drop onto the top/bottom quarter of the pane a new vertical split will be used, if you drop onto the left/right quarter of the pane a new horizontal split will be used.
 577- Setting: `drop_target_size`
 578- Default: `0.2`
 579
 580**Options**
 581
 582`float` values between `0` and `0.5`
 583
 584## Edit Predictions
 585
 586- Description: Settings for edit predictions.
 587- Setting: `edit_predictions`
 588- Default:
 589
 590```json
 591  "edit_predictions": {
 592    "disabled_globs": [
 593      "**/.env*",
 594      "**/*.pem",
 595      "**/*.key",
 596      "**/*.cert",
 597      "**/*.crt",
 598      "**/.dev.vars",
 599      "**/secrets.yml"
 600    ]
 601  }
 602```
 603
 604**Options**
 605
 606### Disabled Globs
 607
 608- 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.
 609- Setting: `disabled_globs`
 610- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/.dev.vars", "**/secrets.yml"]`
 611
 612**Options**
 613
 614List of `string` values.
 615
 616## Edit Predictions Disabled in
 617
 618- Description: A list of language scopes in which edit predictions should be disabled.
 619- Setting: `edit_predictions_disabled_in`
 620- Default: `[]`
 621
 622**Options**
 623
 624List of `string` values
 625
 6261. Don't show edit predictions in comments:
 627
 628```json
 629"disabled_in": ["comment"]
 630```
 631
 6322. Don't show edit predictions in strings and comments:
 633
 634```json
 635"disabled_in": ["comment", "string"]
 636```
 637
 6383. Only in Go, don't show edit predictions in strings and comments:
 639
 640```json
 641{
 642  "languages": {
 643    "Go": {
 644      "edit_predictions_disabled_in": ["comment", "string"]
 645    }
 646  }
 647}
 648```
 649
 650## Current Line Highlight
 651
 652- Description: How to highlight the current line in the editor.
 653- Setting: `current_line_highlight`
 654- Default: `all`
 655
 656**Options**
 657
 6581. Don't highlight the current line:
 659
 660```json
 661"current_line_highlight": "none"
 662```
 663
 6642. Highlight the gutter area:
 665
 666```json
 667"current_line_highlight": "gutter"
 668```
 669
 6703. Highlight the editor area:
 671
 672```json
 673"current_line_highlight": "line"
 674```
 675
 6764. Highlight the full line:
 677
 678```json
 679"current_line_highlight": "all"
 680```
 681
 682## Selection Highlight
 683
 684- Description: Whether to highlight all occurrences of the selected text in an editor.
 685- Setting: `selection_highlight`
 686- Default: `true`
 687
 688## Rounded Selection
 689
 690- Description: Whether the text selection should have rounded corners.
 691- Setting: `rounded_selection`
 692- Default: `true`
 693
 694## Cursor Blink
 695
 696- Description: Whether or not the cursor blinks.
 697- Setting: `cursor_blink`
 698- Default: `true`
 699
 700**Options**
 701
 702`boolean` values
 703
 704## Cursor Shape
 705
 706- Description: Cursor shape for the default editor.
 707- Setting: `cursor_shape`
 708- Default: `bar`
 709
 710**Options**
 711
 7121. A vertical bar:
 713
 714```json
 715"cursor_shape": "bar"
 716```
 717
 7182. A block that surrounds the following character:
 719
 720```json
 721"cursor_shape": "block"
 722```
 723
 7243. An underline / underscore that runs along the following character:
 725
 726```json
 727"cursor_shape": "underline"
 728```
 729
 7304. An box drawn around the following character:
 731
 732```json
 733"cursor_shape": "hollow"
 734```
 735
 736## Gutter
 737
 738- Description: Settings for the editor gutter
 739- Setting: `gutter`
 740- Default:
 741
 742```json
 743{
 744  "gutter": {
 745    "line_numbers": true,
 746    "runnables": true,
 747    "breakpoints": true,
 748    "folds": true,
 749    "min_line_number_digits": 4
 750  }
 751}
 752```
 753
 754**Options**
 755
 756- `line_numbers`: Whether to show line numbers in the gutter
 757- `runnables`: Whether to show runnable buttons in the gutter
 758- `breakpoints`: Whether to show breakpoints in the gutter
 759- `folds`: Whether to show fold buttons in the gutter
 760- `min_line_number_digits`: Minimum number of characters to reserve space for in the gutter
 761
 762## Hide Mouse
 763
 764- Description: Determines when the mouse cursor should be hidden in an editor or input box.
 765- Setting: `hide_mouse`
 766- Default: `on_typing_and_movement`
 767
 768**Options**
 769
 7701. Never hide the mouse cursor:
 771
 772```json
 773"hide_mouse": "never"
 774```
 775
 7762. Hide only when typing:
 777
 778```json
 779"hide_mouse": "on_typing"
 780```
 781
 7823. Hide on both typing and cursor movement:
 783
 784```json
 785"hide_mouse": "on_typing_and_movement"
 786```
 787
 788## Snippet Sort Order
 789
 790- Description: Determines how snippets are sorted relative to other completion items.
 791- Setting: `snippet_sort_order`
 792- Default: `inline`
 793
 794**Options**
 795
 7961. Place snippets at the top of the completion list:
 797
 798```json
 799"snippet_sort_order": "top"
 800```
 801
 8022. Place snippets normally without any preference:
 803
 804```json
 805"snippet_sort_order": "inline"
 806```
 807
 8083. Place snippets at the bottom of the completion list:
 809
 810```json
 811"snippet_sort_order": "bottom"
 812```
 813
 8144. Do not show snippets in the completion list at all:
 815
 816```json
 817"snippet_sort_order": "none"
 818```
 819
 820## Editor Scrollbar
 821
 822- Description: Whether or not to show the editor scrollbar and various elements in it.
 823- Setting: `scrollbar`
 824- Default:
 825
 826```json
 827"scrollbar": {
 828  "show": "auto",
 829  "cursors": true,
 830  "git_diff": true,
 831  "search_results": true,
 832  "selected_text": true,
 833  "selected_symbol": true,
 834  "diagnostics": "all",
 835  "axes": {
 836    "horizontal": true,
 837    "vertical": true,
 838  },
 839},
 840```
 841
 842### Show Mode
 843
 844- Description: When to show the editor scrollbar.
 845- Setting: `show`
 846- Default: `auto`
 847
 848**Options**
 849
 8501. Show the scrollbar if there's important information or follow the system's configured behavior:
 851
 852```json
 853"scrollbar": {
 854  "show": "auto"
 855}
 856```
 857
 8582. Match the system's configured behavior:
 859
 860```json
 861"scrollbar": {
 862  "show": "system"
 863}
 864```
 865
 8663. Always show the scrollbar:
 867
 868```json
 869"scrollbar": {
 870  "show": "always"
 871}
 872```
 873
 8744. Never show the scrollbar:
 875
 876```json
 877"scrollbar": {
 878  "show": "never"
 879}
 880```
 881
 882### Cursor Indicators
 883
 884- Description: Whether to show cursor positions in the scrollbar.
 885- Setting: `cursors`
 886- Default: `true`
 887
 888**Options**
 889
 890`boolean` values
 891
 892### Git Diff Indicators
 893
 894- Description: Whether to show git diff indicators in the scrollbar.
 895- Setting: `git_diff`
 896- Default: `true`
 897
 898**Options**
 899
 900`boolean` values
 901
 902### Search Results Indicators
 903
 904- Description: Whether to show buffer search results in the scrollbar.
 905- Setting: `search_results`
 906- Default: `true`
 907
 908**Options**
 909
 910`boolean` values
 911
 912### Selected Text Indicators
 913
 914- Description: Whether to show selected text occurrences in the scrollbar.
 915- Setting: `selected_text`
 916- Default: `true`
 917
 918**Options**
 919
 920`boolean` values
 921
 922### Selected Symbols Indicators
 923
 924- Description: Whether to show selected symbol occurrences in the scrollbar.
 925- Setting: `selected_symbol`
 926- Default: `true`
 927
 928**Options**
 929
 930`boolean` values
 931
 932### Diagnostics
 933
 934- Description: Which diagnostic indicators to show in the scrollbar.
 935- Setting: `diagnostics`
 936- Default: `all`
 937
 938**Options**
 939
 9401. Show all diagnostics:
 941
 942```json
 943{
 944  "diagnostics": "all"
 945}
 946```
 947
 9482. Do not show any diagnostics:
 949
 950```json
 951{
 952  "diagnostics": "none"
 953}
 954```
 955
 9563. Show only errors:
 957
 958```json
 959{
 960  "diagnostics": "error"
 961}
 962```
 963
 9644. Show only errors and warnings:
 965
 966```json
 967{
 968  "diagnostics": "warning"
 969}
 970```
 971
 9725. Show only errors, warnings, and information:
 973
 974```json
 975{
 976  "diagnostics": "information"
 977}
 978```
 979
 980### Axes
 981
 982- Description: Forcefully enable or disable the scrollbar for each axis
 983- Setting: `axes`
 984- Default:
 985
 986```json
 987"scrollbar": {
 988  "axes": {
 989    "horizontal": true,
 990    "vertical": true,
 991  },
 992}
 993```
 994
 995#### Horizontal
 996
 997- Description: When false, forcefully disables the horizontal scrollbar. Otherwise, obey other settings.
 998- Setting: `horizontal`
 999- Default: `true`
1000
1001**Options**
1002
1003`boolean` values
1004
1005#### Vertical
1006
1007- Description: When false, forcefully disables the vertical scrollbar. Otherwise, obey other settings.
1008- Setting: `vertical`
1009- Default: `true`
1010
1011**Options**
1012
1013`boolean` values
1014
1015## Minimap
1016
1017- Description: Settings related to the editor's minimap, which provides an overview of your document.
1018- Setting: `minimap`
1019- Default:
1020
1021```json
1022{
1023  "minimap": {
1024    "show": "never",
1025    "thumb": "always",
1026    "thumb_border": "left_open",
1027    "current_line_highlight": null
1028  }
1029}
1030```
1031
1032### Show Mode
1033
1034- Description: When to show the minimap in the editor.
1035- Setting: `show`
1036- Default: `never`
1037
1038**Options**
1039
10401. Always show the minimap:
1041
1042```json
1043{
1044  "show": "always"
1045}
1046```
1047
10482. Show the minimap if the editor's scrollbars are visible:
1049
1050```json
1051{
1052  "show": "auto"
1053}
1054```
1055
10563. Never show the minimap:
1057
1058```json
1059{
1060  "show": "never"
1061}
1062```
1063
1064### Thumb Display
1065
1066- Description: When to show the minimap thumb (the visible editor area) in the minimap.
1067- Setting: `thumb`
1068- Default: `always`
1069
1070**Options**
1071
10721. Show the minimap thumb when hovering over the minimap:
1073
1074```json
1075{
1076  "thumb": "hover"
1077}
1078```
1079
10802. Always show the minimap thumb:
1081
1082```json
1083{
1084  "thumb": "always"
1085}
1086```
1087
1088### Thumb Border
1089
1090- Description: How the minimap thumb border should look.
1091- Setting: `thumb_border`
1092- Default: `left_open`
1093
1094**Options**
1095
10961. Display a border on all sides of the thumb:
1097
1098```json
1099{
1100  "thumb_border": "full"
1101}
1102```
1103
11042. Display a border on all sides except the left side:
1105
1106```json
1107{
1108  "thumb_border": "left_open"
1109}
1110```
1111
11123. Display a border on all sides except the right side:
1113
1114```json
1115{
1116  "thumb_border": "right_open"
1117}
1118```
1119
11204. Display a border only on the left side:
1121
1122```json
1123{
1124  "thumb_border": "left_only"
1125}
1126```
1127
11285. Display the thumb without any border:
1129
1130```json
1131{
1132  "thumb_border": "none"
1133}
1134```
1135
1136### Current Line Highlight
1137
1138- Description: How to highlight the current line in the minimap.
1139- Setting: `current_line_highlight`
1140- Default: `null`
1141
1142**Options**
1143
11441. Inherit the editor's current line highlight setting:
1145
1146```json
1147{
1148  "minimap": {
1149    "current_line_highlight": null
1150  }
1151}
1152```
1153
11542. Highlight the current line in the minimap:
1155
1156```json
1157{
1158  "minimap": {
1159    "current_line_highlight": "line"
1160  }
1161}
1162```
1163
1164or
1165
1166```json
1167{
1168  "minimap": {
1169    "current_line_highlight": "all"
1170  }
1171}
1172```
1173
11743. Do not highlight the current line in the minimap:
1175
1176```json
1177{
1178  "minimap": {
1179    "current_line_highlight": "gutter"
1180  }
1181}
1182```
1183
1184or
1185
1186```json
1187{
1188  "minimap": {
1189    "current_line_highlight": "none"
1190  }
1191}
1192```
1193
1194## Editor Tab Bar
1195
1196- Description: Settings related to the editor's tab bar.
1197- Settings: `tab_bar`
1198- Default:
1199
1200```json
1201"tab_bar": {
1202  "show": true,
1203  "show_nav_history_buttons": true,
1204  "show_tab_bar_buttons": true
1205}
1206```
1207
1208### Show
1209
1210- Description: Whether or not to show the tab bar in the editor.
1211- Setting: `show`
1212- Default: `true`
1213
1214**Options**
1215
1216`boolean` values
1217
1218### Navigation History Buttons
1219
1220- Description: Whether or not to show the navigation history buttons.
1221- Setting: `show_nav_history_buttons`
1222- Default: `true`
1223
1224**Options**
1225
1226`boolean` values
1227
1228### Tab Bar Buttons
1229
1230- Description: Whether or not to show the tab bar buttons.
1231- Setting: `show_tab_bar_buttons`
1232- Default: `true`
1233
1234**Options**
1235
1236`boolean` values
1237
1238## Editor Tabs
1239
1240- Description: Configuration for the editor tabs.
1241- Setting: `tabs`
1242- Default:
1243
1244```json
1245"tabs": {
1246  "close_position": "right",
1247  "file_icons": false,
1248  "git_status": false,
1249  "activate_on_close": "history",
1250  "show_close_button": "hover",
1251  "show_diagnostics": "off"
1252},
1253```
1254
1255### Close Position
1256
1257- Description: Where to display close button within a tab.
1258- Setting: `close_position`
1259- Default: `right`
1260
1261**Options**
1262
12631. Display the close button on the right:
1264
1265```json
1266{
1267  "close_position": "right"
1268}
1269```
1270
12712. Display the close button on the left:
1272
1273```json
1274{
1275  "close_position": "left"
1276}
1277```
1278
1279### File Icons
1280
1281- Description: Whether to show the file icon for a tab.
1282- Setting: `file_icons`
1283- Default: `false`
1284
1285### Git Status
1286
1287- Description: Whether or not to show Git file status in tab.
1288- Setting: `git_status`
1289- Default: `false`
1290
1291### Activate on close
1292
1293- Description: What to do after closing the current tab.
1294- Setting: `activate_on_close`
1295- Default: `history`
1296
1297**Options**
1298
12991.  Activate the tab that was open previously:
1300
1301```json
1302{
1303  "activate_on_close": "history"
1304}
1305```
1306
13072. Activate the right neighbour tab if present:
1308
1309```json
1310{
1311  "activate_on_close": "neighbour"
1312}
1313```
1314
13153. Activate the left neighbour tab if present:
1316
1317```json
1318{
1319  "activate_on_close": "left_neighbour"
1320}
1321```
1322
1323### Show close button
1324
1325- Description: Controls the appearance behavior of the tab's close button.
1326- Setting: `show_close_button`
1327- Default: `hover`
1328
1329**Options**
1330
13311.  Show it just upon hovering the tab:
1332
1333```json
1334{
1335  "show_close_button": "hover"
1336}
1337```
1338
13392. Show it persistently:
1340
1341```json
1342{
1343  "show_close_button": "always"
1344}
1345```
1346
13473. Never show it, even if hovering it:
1348
1349```json
1350{
1351  "show_close_button": "hidden"
1352}
1353```
1354
1355### Show Diagnostics
1356
1357- 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.
1358- Setting: `show_diagnostics`
1359- Default: `off`
1360
1361**Options**
1362
13631. Do not mark any files:
1364
1365```json
1366{
1367  "show_diagnostics": "off"
1368}
1369```
1370
13712. Only mark files with errors:
1372
1373```json
1374{
1375  "show_diagnostics": "errors"
1376}
1377```
1378
13793. Mark files with errors and warnings:
1380
1381```json
1382{
1383  "show_diagnostics": "all"
1384}
1385```
1386
1387### Show Inline Code Actions
1388
1389- Description: Whether to show code action button at start of buffer line.
1390- Setting: `inline_code_actions`
1391- Default: `true`
1392
1393**Options**
1394
1395`boolean` values
1396
1397### Drag And Drop Selection
1398
1399- 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.
1400- Setting: `drag_and_drop_selection`
1401- Default:
1402
1403```json
1404"drag_and_drop_selection": {
1405  "enabled": true,
1406  "delay": 300
1407}
1408```
1409
1410## Editor Toolbar
1411
1412- Description: Whether or not to show various elements in the editor toolbar.
1413- Setting: `toolbar`
1414- Default:
1415
1416```json
1417"toolbar": {
1418  "breadcrumbs": true,
1419  "quick_actions": true,
1420  "selections_menu": true,
1421  "agent_review": true,
1422  "code_actions": false
1423},
1424```
1425
1426**Options**
1427
1428Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
1429
1430## Use System Tabs
1431
1432- Description: Whether to allow windows to tab together based on the user’s tabbing preference (macOS only).
1433- Setting: `use_system_window_tabs`
1434- Default: `false`
1435
1436**Options**
1437
1438This setting enables integration with macOS’s native window tabbing feature. When set to `true`, Zed windows can be grouped together as tabs in a single macOS window, following the system-wide tabbing preferences set by the user (such as "Always", "In Full Screen", or "Never"). This setting is only available on macOS.
1439
1440## Enable Language Server
1441
1442- Description: Whether or not to use language servers to provide code intelligence.
1443- Setting: `enable_language_server`
1444- Default: `true`
1445
1446**Options**
1447
1448`boolean` values
1449
1450## Ensure Final Newline On Save
1451
1452- Description: Removes any lines containing only whitespace at the end of the file and ensures just one newline at the end.
1453- Setting: `ensure_final_newline_on_save`
1454- Default: `true`
1455
1456**Options**
1457
1458`boolean` values
1459
1460## Expand Excerpt Lines
1461
1462- Description: The default number of lines to expand excerpts in the multibuffer by
1463- Setting: `expand_excerpt_lines`
1464- Default: `5`
1465
1466**Options**
1467
1468Positive `integer` values
1469
1470## Excerpt Context Lines
1471
1472- Description: The number of lines of context to provide when showing excerpts in the multibuffer.
1473- Setting: `excerpt_context_lines`
1474- Default: `2`
1475
1476**Options**
1477
1478Positive `integer` value between 1 and 32. Values outside of this range will be clamped to this range.
1479
1480## Extend Comment On Newline
1481
1482- Description: Whether to start a new line with a comment when a previous line is a comment as well.
1483- Setting: `extend_comment_on_newline`
1484- Default: `true`
1485
1486**Options**
1487
1488`boolean` values
1489
1490## Status Bar
1491
1492- Description: Control various elements in the status bar. Note that some items in the status bar have their own settings set elsewhere.
1493- Setting: `status_bar`
1494- Default:
1495
1496```json
1497"status_bar": {
1498  "active_language_button": true,
1499  "cursor_position_button": true
1500},
1501```
1502
1503## LSP
1504
1505- Description: Configuration for language servers.
1506- Setting: `lsp`
1507- Default: `null`
1508
1509**Options**
1510
1511The following settings can be overridden for specific language servers:
1512
1513- `initialization_options`
1514- `settings`
1515
1516To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
1517
1518Some 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.
1519
1520For example to pass the `check` option to `rust-analyzer`, use the following configuration:
1521
1522```json
1523"lsp": {
1524  "rust-analyzer": {
1525    "initialization_options": {
1526      "check": {
1527        "command": "clippy" // rust-analyzer.check.command (default: "check")
1528      }
1529    }
1530  }
1531}
1532```
1533
1534While other options may be changed at a runtime and should be placed under `settings`:
1535
1536```json
1537"lsp": {
1538  "yaml-language-server": {
1539    "settings": {
1540      "yaml": {
1541        "keyOrdering": true // Enforces alphabetical ordering of keys in maps
1542      }
1543    }
1544  }
1545}
1546```
1547
1548## Global LSP Settings
1549
1550- Description: Configuration for global LSP settings that apply to all language servers
1551- Setting: `global_lsp_settings`
1552- Default:
1553
1554```json
1555{
1556  "global_lsp_settings": {
1557    "button": true
1558  }
1559}
1560```
1561
1562**Options**
1563
1564- `button`: Whether to show the LSP status button in the status bar
1565
1566## LSP Highlight Debounce
1567
1568- Description: The debounce delay in milliseconds before querying highlights from the language server based on the current cursor location.
1569- Setting: `lsp_highlight_debounce`
1570- Default: `75`
1571
1572## Global LSP Settings
1573
1574- Description: Common language server settings.
1575- Setting: `global_lsp_settings`
1576- Default:
1577
1578```json
1579"global_lsp_settings": {
1580  "button": true
1581}
1582```
1583
1584**Options**
1585
1586`integer` values representing milliseconds
1587
1588## Features
1589
1590- Description: Features that can be globally enabled or disabled
1591- Setting: `features`
1592- Default:
1593
1594```json
1595{
1596  "features": {
1597    "edit_prediction_provider": "zed"
1598  }
1599}
1600```
1601
1602### Edit Prediction Provider
1603
1604- Description: Which edit prediction provider to use
1605- Setting: `edit_prediction_provider`
1606- Default: `"zed"`
1607
1608**Options**
1609
16101. Use Zeta as the edit prediction provider:
1611
1612```json
1613{
1614  "features": {
1615    "edit_prediction_provider": "zed"
1616  }
1617}
1618```
1619
16202. Use Copilot as the edit prediction provider:
1621
1622```json
1623{
1624  "features": {
1625    "edit_prediction_provider": "copilot"
1626  }
1627}
1628```
1629
16303. Use Supermaven as the edit prediction provider:
1631
1632```json
1633{
1634  "features": {
1635    "edit_prediction_provider": "supermaven"
1636  }
1637}
1638```
1639
16404. Turn off edit predictions across all providers
1641
1642```json
1643{
1644  "features": {
1645    "edit_prediction_provider": "none"
1646  }
1647}
1648```
1649
1650## Format On Save
1651
1652- Description: Whether or not to perform a buffer format before saving.
1653- Setting: `format_on_save`
1654- Default: `on`
1655
1656**Options**
1657
16581. `on`, enables format on save obeying `formatter` setting:
1659
1660```json
1661{
1662  "format_on_save": "on"
1663}
1664```
1665
16662. `off`, disables format on save:
1667
1668```json
1669{
1670  "format_on_save": "off"
1671}
1672```
1673
1674## Formatter
1675
1676- Description: How to perform a buffer format.
1677- Setting: `formatter`
1678- Default: `auto`
1679
1680**Options**
1681
16821. To use the current language server, use `"language_server"`:
1683
1684```json
1685{
1686  "formatter": "language_server"
1687}
1688```
1689
16902. 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):
1691
1692```json
1693{
1694  "formatter": {
1695    "external": {
1696      "command": "sed",
1697      "arguments": ["-e", "s/ *$//"]
1698    }
1699  }
1700}
1701```
1702
17033. 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.
1704
1705WARNING: `{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.
1706
1707```json
1708  "formatter": {
1709    "external": {
1710      "command": "prettier",
1711      "arguments": ["--stdin-filepath", "{buffer_path}"]
1712    }
1713  }
1714```
1715
17164. Or to use code actions provided by the connected language servers, use `"code_actions"`:
1717
1718```json
1719{
1720  "formatter": {
1721    "code_actions": {
1722      // Use ESLint's --fix:
1723      "source.fixAll.eslint": true,
1724      // Organize imports on save:
1725      "source.organizeImports": true
1726    }
1727  }
1728}
1729```
1730
17315. Or to use multiple formatters consecutively, use an array of formatters:
1732
1733```json
1734{
1735  "formatter": [
1736    { "language_server": { "name": "rust-analyzer" } },
1737    {
1738      "external": {
1739        "command": "sed",
1740        "arguments": ["-e", "s/ *$//"]
1741      }
1742    }
1743  ]
1744}
1745```
1746
1747Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1748If any of the formatters fails, the subsequent ones will still be executed.
1749
1750## Code Actions On Format
1751
1752- Description: The code actions to perform with the primary language server when formatting the buffer.
1753- Setting: `code_actions_on_format`
1754- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
1755
1756**Examples**
1757
1758<!--
1759TBD: Add Python Ruff source.organizeImports example
1760-->
1761
17621. Organize imports on format in TypeScript and TSX buffers:
1763
1764```json
1765{
1766  "languages": {
1767    "TypeScript": {
1768      "code_actions_on_format": {
1769        "source.organizeImports": true
1770      }
1771    },
1772    "TSX": {
1773      "code_actions_on_format": {
1774        "source.organizeImports": true
1775      }
1776    }
1777  }
1778}
1779```
1780
17812. Run ESLint `fixAll` code action when formatting:
1782
1783```json
1784{
1785  "languages": {
1786    "JavaScript": {
1787      "code_actions_on_format": {
1788        "source.fixAll.eslint": true
1789      }
1790    }
1791  }
1792}
1793```
1794
17953. Run only a single ESLint rule when using `fixAll`:
1796
1797```json
1798{
1799  "languages": {
1800    "JavaScript": {
1801      "code_actions_on_format": {
1802        "source.fixAll.eslint": true
1803      }
1804    }
1805  },
1806  "lsp": {
1807    "eslint": {
1808      "settings": {
1809        "codeActionOnSave": {
1810          "rules": ["import/order"]
1811        }
1812      }
1813    }
1814  }
1815}
1816```
1817
1818## Auto close
1819
1820- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1821- Setting: `use_autoclose`
1822- Default: `true`
1823
1824**Options**
1825
1826`boolean` values
1827
1828## Always Treat Brackets As Autoclosed
1829
1830- Description: Controls how the editor handles the autoclosed characters.
1831- Setting: `always_treat_brackets_as_autoclosed`
1832- Default: `false`
1833
1834**Options**
1835
1836`boolean` values
1837
1838**Example**
1839
1840If the setting is set to `true`:
1841
18421. Enter in the editor: `)))`
18432. Move the cursor to the start: `^)))`
18443. Enter again: `)))`
1845
1846The result is still `)))` and not `))))))`, which is what it would be by default.
1847
1848## File Scan Exclusions
1849
1850- Setting: `file_scan_exclusions`
1851- 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`.
1852- Default:
1853
1854```json
1855"file_scan_exclusions": [
1856  "**/.git",
1857  "**/.svn",
1858  "**/.hg",
1859  "**/.jj",
1860  "**/CVS",
1861  "**/.DS_Store",
1862  "**/Thumbs.db",
1863  "**/.classpath",
1864  "**/.settings"
1865],
1866```
1867
1868Note, 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.
1869
1870## File Scan Inclusions
1871
1872- Setting: `file_scan_inclusions`
1873- 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.
1874- Default:
1875
1876```json
1877"file_scan_inclusions": [".env*"],
1878```
1879
1880## File Types
1881
1882- Setting: `file_types`
1883- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1884- Default:
1885
1886```json
1887"file_types": {
1888  "JSONC": ["**/.zed/**/*.json", "**/zed/**/*.json", "**/Zed/**/*.json", "**/.vscode/**/*.json"],
1889  "Shell Script": [".env.*"]
1890}
1891```
1892
1893**Examples**
1894
1895To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1896
1897```json
1898{
1899  "file_types": {
1900    "C++": ["c"],
1901    "TOML": ["MyLockFile"],
1902    "Dockerfile": ["Dockerfile*"]
1903  }
1904}
1905```
1906
1907## Diagnostics
1908
1909- Description: Configuration for diagnostics-related features.
1910- Setting: `diagnostics`
1911- Default:
1912
1913```json
1914{
1915  "diagnostics": {
1916    "include_warnings": true,
1917    "inline": {
1918      "enabled": false
1919    },
1920    "update_with_cursor": false,
1921    "primary_only": false,
1922    "use_rendered": false
1923  }
1924}
1925```
1926
1927### Inline Diagnostics
1928
1929- Description: Whether or not to show diagnostics information inline.
1930- Setting: `inline`
1931- Default:
1932
1933```json
1934{
1935  "diagnostics": {
1936    "inline": {
1937      "enabled": false,
1938      "update_debounce_ms": 150,
1939      "padding": 4,
1940      "min_column": 0,
1941      "max_severity": null
1942    }
1943  }
1944}
1945```
1946
1947**Options**
1948
19491. Enable inline diagnostics.
1950
1951```json
1952{
1953  "diagnostics": {
1954    "inline": {
1955      "enabled": true
1956    }
1957  }
1958}
1959```
1960
19612. Delay diagnostic updates until some time after the last diagnostic update.
1962
1963```json
1964{
1965  "diagnostics": {
1966    "inline": {
1967      "enabled": true,
1968      "update_debounce_ms": 150
1969    }
1970  }
1971}
1972```
1973
19743. Set padding between the end of the source line and the start of the diagnostic.
1975
1976```json
1977{
1978  "diagnostics": {
1979    "inline": {
1980      "enabled": true,
1981      "padding": 4
1982    }
1983  }
1984}
1985```
1986
19874. Horizontally align inline diagnostics at the given column.
1988
1989```json
1990{
1991  "diagnostics": {
1992    "inline": {
1993      "enabled": true,
1994      "min_column": 80
1995    }
1996  }
1997}
1998```
1999
20005. Show only warning and error diagnostics.
2001
2002```json
2003{
2004  "diagnostics": {
2005    "inline": {
2006      "enabled": true,
2007      "max_severity": "warning"
2008    }
2009  }
2010}
2011```
2012
2013## Git
2014
2015- Description: Configuration for git-related features.
2016- Setting: `git`
2017- Default:
2018
2019```json
2020{
2021  "git": {
2022    "git_gutter": "tracked_files",
2023    "inline_blame": {
2024      "enabled": true
2025    },
2026    "branch_picker": {
2027      "show_author_name": true
2028    },
2029    "hunk_style": "staged_hollow"
2030  }
2031}
2032```
2033
2034### Git Gutter
2035
2036- Description: Whether or not to show the git gutter.
2037- Setting: `git_gutter`
2038- Default: `tracked_files`
2039
2040**Options**
2041
20421. Show git gutter in tracked files
2043
2044```json
2045{
2046  "git": {
2047    "git_gutter": "tracked_files"
2048  }
2049}
2050```
2051
20522. Hide git gutter
2053
2054```json
2055{
2056  "git": {
2057    "git_gutter": "hide"
2058  }
2059}
2060```
2061
2062### Gutter Debounce
2063
2064- Description: Sets the debounce threshold (in milliseconds) after which changes are reflected in the git gutter.
2065- Setting: `gutter_debounce`
2066- Default: `null`
2067
2068**Options**
2069
2070`integer` values representing milliseconds
2071
2072Example:
2073
2074```json
2075{
2076  "git": {
2077    "gutter_debounce": 100
2078  }
2079}
2080```
2081
2082### Inline Git Blame
2083
2084- Description: Whether or not to show git blame information inline, on the currently focused line.
2085- Setting: `inline_blame`
2086- Default:
2087
2088```json
2089{
2090  "git": {
2091    "inline_blame": {
2092      "enabled": true
2093    }
2094  }
2095}
2096```
2097
2098**Options**
2099
21001. Disable inline git blame:
2101
2102```json
2103{
2104  "git": {
2105    "inline_blame": {
2106      "enabled": false
2107    }
2108  }
2109}
2110```
2111
21122. Only show inline git blame after a delay (that starts after cursor stops moving):
2113
2114```json
2115{
2116  "git": {
2117    "inline_blame": {
2118      "delay_ms": 500
2119    }
2120  }
2121}
2122```
2123
21243. Show a commit summary next to the commit date and author:
2125
2126```json
2127{
2128  "git": {
2129    "inline_blame": {
2130      "show_commit_summary": true
2131    }
2132  }
2133}
2134```
2135
21364. Use this as the minimum column at which to display inline blame information:
2137
2138```json
2139{
2140  "git": {
2141    "inline_blame": {
2142      "min_column": 80
2143    }
2144  }
2145}
2146```
2147
21485. Set the padding between the end of the line and the inline blame hint, in ems:
2149
2150```json
2151{
2152  "git": {
2153    "inline_blame": {
2154      "padding": 10
2155    }
2156  }
2157}
2158```
2159
2160### Branch Picker
2161
2162- Description: Configuration related to the branch picker.
2163- Setting: `branch_picker`
2164- Default:
2165
2166```json
2167{
2168  "git": {
2169    "branch_picker": {
2170      "show_author_name": false
2171    }
2172  }
2173}
2174```
2175
2176**Options**
2177
21781. Show the author name in the branch picker:
2179
2180```json
2181{
2182  "git": {
2183    "branch_picker": {
2184      "show_author_name": true
2185    }
2186  }
2187}
2188```
2189
2190### Hunk Style
2191
2192- Description: What styling we should use for the diff hunks.
2193- Setting: `hunk_style`
2194- Default:
2195
2196```json
2197{
2198  "git": {
2199    "hunk_style": "staged_hollow"
2200  }
2201}
2202```
2203
2204**Options**
2205
22061. Show the staged hunks faded out and with a border:
2207
2208```json
2209{
2210  "git": {
2211    "hunk_style": "staged_hollow"
2212  }
2213}
2214```
2215
22162. Show unstaged hunks faded out and with a border:
2217
2218```json
2219{
2220  "git": {
2221    "hunk_style": "unstaged_hollow"
2222  }
2223}
2224```
2225
2226## Go to Definition Fallback
2227
2228- Description: What to do when the {#action editor::GoToDefinition} action fails to find a definition
2229- Setting: `go_to_definition_fallback`
2230- Default: `"find_all_references"`
2231
2232**Options**
2233
22341. Do nothing:
2235
2236```json
2237{
2238  "go_to_definition_fallback": "none"
2239}
2240```
2241
22422. Find references for the same symbol (default):
2243
2244```json
2245{
2246  "go_to_definition_fallback": "find_all_references"
2247}
2248```
2249
2250## Hard Tabs
2251
2252- Description: Whether to indent lines using tab characters or multiple spaces.
2253- Setting: `hard_tabs`
2254- Default: `false`
2255
2256**Options**
2257
2258`boolean` values
2259
2260## Helix Mode
2261
2262- Description: Whether or not to enable Helix mode. Enabling `helix_mode` also enables `vim_mode`. See the [Helix documentation](./helix.md) for more details.
2263- Setting: `helix_mode`
2264- Default: `false`
2265
2266**Options**
2267
2268`boolean` values
2269
2270## Indent Guides
2271
2272- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
2273- Setting: `indent_guides`
2274- Default:
2275
2276```json
2277{
2278  "indent_guides": {
2279    "enabled": true,
2280    "line_width": 1,
2281    "active_line_width": 1,
2282    "coloring": "fixed",
2283    "background_coloring": "disabled"
2284  }
2285}
2286```
2287
2288**Options**
2289
22901. Disable indent guides
2291
2292```json
2293{
2294  "indent_guides": {
2295    "enabled": false
2296  }
2297}
2298```
2299
23002. Enable indent guides for a specific language.
2301
2302```json
2303{
2304  "languages": {
2305    "Python": {
2306      "indent_guides": {
2307        "enabled": true
2308      }
2309    }
2310  }
2311}
2312```
2313
23143. Enable indent aware coloring ("rainbow indentation").
2315   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.
2316
2317```json
2318{
2319  "indent_guides": {
2320    "enabled": true,
2321    "coloring": "indent_aware"
2322  }
2323}
2324```
2325
23264. Enable indent aware background coloring ("rainbow indentation").
2327   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.
2328
2329```json
2330{
2331  "indent_guides": {
2332    "enabled": true,
2333    "coloring": "indent_aware",
2334    "background_coloring": "indent_aware"
2335  }
2336}
2337```
2338
2339## Hover Popover Enabled
2340
2341- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
2342- Setting: `hover_popover_enabled`
2343- Default: `true`
2344
2345**Options**
2346
2347`boolean` values
2348
2349## Hover Popover Delay
2350
2351- Description: Time to wait in milliseconds before showing the informational hover box.
2352- Setting: `hover_popover_delay`
2353- Default: `300`
2354
2355**Options**
2356
2357`integer` values representing milliseconds
2358
2359## Icon Theme
2360
2361- 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.
2362- Setting: `icon_theme`
2363- Default: `Zed (Default)`
2364
2365### Icon Theme Object
2366
2367- Description: Specify the icon theme using an object that includes the `mode`, `dark`, and `light`.
2368- Setting: `icon_theme`
2369- Default:
2370
2371```json
2372"icon_theme": {
2373  "mode": "system",
2374  "dark": "Zed (Default)",
2375  "light": "Zed (Default)"
2376},
2377```
2378
2379### Mode
2380
2381- Description: Specify the icon theme mode.
2382- Setting: `mode`
2383- Default: `system`
2384
2385**Options**
2386
23871. Set the icon theme to dark mode
2388
2389```json
2390{
2391  "mode": "dark"
2392}
2393```
2394
23952. Set the icon theme to light mode
2396
2397```json
2398{
2399  "mode": "light"
2400}
2401```
2402
24033. Set the icon theme to system mode
2404
2405```json
2406{
2407  "mode": "system"
2408}
2409```
2410
2411### Dark
2412
2413- Description: The name of the dark icon theme.
2414- Setting: `dark`
2415- Default: `Zed (Default)`
2416
2417**Options**
2418
2419Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
2420
2421### Light
2422
2423- Description: The name of the light icon theme.
2424- Setting: `light`
2425- Default: `Zed (Default)`
2426
2427**Options**
2428
2429Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
2430
2431## Image Viewer
2432
2433- Description: Settings for image viewer functionality
2434- Setting: `image_viewer`
2435- Default:
2436
2437```json
2438{
2439  "image_viewer": {
2440    "unit": "binary"
2441  }
2442}
2443```
2444
2445**Options**
2446
2447### Unit
2448
2449- Description: The unit for image file sizes
2450- Setting: `unit`
2451- Default: `"binary"`
2452
2453**Options**
2454
24551. Use binary units (KiB, MiB):
2456
2457```json
2458{
2459  "image_viewer": {
2460    "unit": "binary"
2461  }
2462}
2463```
2464
24652. Use decimal units (KB, MB):
2466
2467```json
2468{
2469  "image_viewer": {
2470    "unit": "decimal"
2471  }
2472}
2473```
2474
2475## Inlay hints
2476
2477- Description: Configuration for displaying extra text with hints in the editor.
2478- Setting: `inlay_hints`
2479- Default:
2480
2481```json
2482"inlay_hints": {
2483  "enabled": false,
2484  "show_type_hints": true,
2485  "show_parameter_hints": true,
2486  "show_other_hints": true,
2487  "show_background": false,
2488  "edit_debounce_ms": 700,
2489  "scroll_debounce_ms": 50,
2490  "toggle_on_modifiers_press": null
2491}
2492```
2493
2494**Options**
2495
2496Inlay hints querying consists of two parts: editor (client) and LSP server.
2497With 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.
2498At 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.
2499
2500The following languages have inlay hints preconfigured by Zed:
2501
2502- [Go](https://docs.zed.dev/languages/go)
2503- [Rust](https://docs.zed.dev/languages/rust)
2504- [Svelte](https://docs.zed.dev/languages/svelte)
2505- [TypeScript](https://docs.zed.dev/languages/typescript)
2506
2507Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
2508
2509Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
2510Settings-related hint updates are not debounced.
2511
2512All possible config values for `toggle_on_modifiers_press` are:
2513
2514```json
2515"inlay_hints": {
2516  "toggle_on_modifiers_press": {
2517    "control": true,
2518    "shift": true,
2519    "alt": true,
2520    "platform": true,
2521    "function": true
2522  }
2523}
2524```
2525
2526Unspecified values have a `false` value, hints won't be toggled if all the modifiers are `false` or not all the modifiers are pressed.
2527
2528## Journal
2529
2530- Description: Configuration for the journal.
2531- Setting: `journal`
2532- Default:
2533
2534```json
2535"journal": {
2536  "path": "~",
2537  "hour_format": "hour12"
2538}
2539```
2540
2541### Path
2542
2543- Description: The path of the directory where journal entries are stored.
2544- Setting: `path`
2545- Default: `~`
2546
2547**Options**
2548
2549`string` values
2550
2551### Hour Format
2552
2553- Description: The format to use for displaying hours in the journal.
2554- Setting: `hour_format`
2555- Default: `hour12`
2556
2557**Options**
2558
25591. 12-hour format:
2560
2561```json
2562{
2563  "hour_format": "hour12"
2564}
2565```
2566
25672. 24-hour format:
2568
2569```json
2570{
2571  "hour_format": "hour24"
2572}
2573```
2574
2575## JSX Tag Auto Close
2576
2577- Description: Whether to automatically close JSX tags
2578- Setting: `jsx_tag_auto_close`
2579- Default:
2580
2581```json
2582{
2583  "jsx_tag_auto_close": {
2584    "enabled": true
2585  }
2586}
2587```
2588
2589**Options**
2590
2591- `enabled`: Whether to enable automatic JSX tag closing
2592
2593## Languages
2594
2595- Description: Configuration for specific languages.
2596- Setting: `languages`
2597- Default: `null`
2598
2599**Options**
2600
2601To override settings for a language, add an entry for that languages name to the `languages` value. Example:
2602
2603```json
2604"languages": {
2605  "C": {
2606    "format_on_save": "off",
2607    "preferred_line_length": 64,
2608    "soft_wrap": "preferred_line_length"
2609  },
2610  "JSON": {
2611    "tab_size": 4
2612  }
2613}
2614```
2615
2616The following settings can be overridden for each specific language:
2617
2618- [`enable_language_server`](#enable-language-server)
2619- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
2620- [`format_on_save`](#format-on-save)
2621- [`formatter`](#formatter)
2622- [`hard_tabs`](#hard-tabs)
2623- [`preferred_line_length`](#preferred-line-length)
2624- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
2625- [`show_edit_predictions`](#show-edit-predictions)
2626- [`show_whitespaces`](#show-whitespaces)
2627- [`soft_wrap`](#soft-wrap)
2628- [`tab_size`](#tab-size)
2629- [`use_autoclose`](#use-autoclose)
2630- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
2631
2632These values take in the same options as the root-level settings with the same name.
2633
2634## Language Models
2635
2636- Description: Configuration for language model providers
2637- Setting: `language_models`
2638- Default:
2639
2640```json
2641{
2642  "language_models": {
2643    "anthropic": {
2644      "api_url": "https://api.anthropic.com"
2645    },
2646    "google": {
2647      "api_url": "https://generativelanguage.googleapis.com"
2648    },
2649    "ollama": {
2650      "api_url": "http://localhost:11434"
2651    },
2652    "openai": {
2653      "api_url": "https://api.openai.com/v1"
2654    }
2655  }
2656}
2657```
2658
2659**Options**
2660
2661Configuration for various AI model providers including API URLs and authentication settings.
2662
2663## Line Indicator Format
2664
2665- Description: Format for line indicator in the status bar
2666- Setting: `line_indicator_format`
2667- Default: `"short"`
2668
2669**Options**
2670
26711. Short format:
2672
2673```json
2674{
2675  "line_indicator_format": "short"
2676}
2677```
2678
26792. Long format:
2680
2681```json
2682{
2683  "line_indicator_format": "long"
2684}
2685```
2686
2687## Linked Edits
2688
2689- Description: Whether to perform linked edits of associated ranges, if the language server supports it. For example, when editing opening `<html>` tag, the contents of the closing `</html>` tag will be edited as well.
2690- Setting: `linked_edits`
2691- Default: `true`
2692
2693**Options**
2694
2695`boolean` values
2696
2697## LSP Document Colors
2698
2699- Description: Whether to show document color information from the language server
2700- Setting: `lsp_document_colors`
2701- Default: `true`
2702
2703**Options**
2704
2705`boolean` values
2706
2707## Max Tabs
2708
2709- Description: Maximum number of tabs to show in the tab bar
2710- Setting: `max_tabs`
2711- Default: `null`
2712
2713**Options**
2714
2715Positive `integer` values or `null` for unlimited tabs
2716
2717## Middle Click Paste (Linux only)
2718
2719- Description: Enable middle-click paste on Linux
2720- Setting: `middle_click_paste`
2721- Default: `true`
2722
2723**Options**
2724
2725`boolean` values
2726
2727## Multi Cursor Modifier
2728
2729- 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.
2730- Setting: `multi_cursor_modifier`
2731- Default: `alt`
2732
2733**Options**
2734
27351. Maps to `Alt` on Linux and Windows and to `Option` on macOS:
2736
2737```json
2738{
2739  "multi_cursor_modifier": "alt"
2740}
2741```
2742
27432. Maps `Control` on Linux and Windows and to `Command` on macOS:
2744
2745```json
2746{
2747  "multi_cursor_modifier": "cmd_or_ctrl" // alias: "cmd", "ctrl"
2748}
2749```
2750
2751## Node
2752
2753- Description: Configuration for Node.js integration
2754- Setting: `node`
2755- Default:
2756
2757```json
2758{
2759  "node": {
2760    "ignore_system_version": false,
2761    "path": null,
2762    "npm_path": null
2763  }
2764}
2765```
2766
2767**Options**
2768
2769- `ignore_system_version`: Whether to ignore the system Node.js version
2770- `path`: Custom path to Node.js binary
2771- `npm_path`: Custom path to npm binary
2772
2773## Network Proxy
2774
2775- Description: Configure a network proxy for Zed.
2776- Setting: `proxy`
2777- Default: `null`
2778
2779**Options**
2780
2781The proxy setting must contain a URL to the proxy.
2782
2783The following URI schemes are supported:
2784
2785- `http`
2786- `https`
2787- `socks4` - SOCKS4 proxy with local DNS
2788- `socks4a` - SOCKS4 proxy with remote DNS
2789- `socks5` - SOCKS5 proxy with local DNS
2790- `socks5h` - SOCKS5 proxy with remote DNS
2791
2792`http` will be used when no scheme is specified.
2793
2794By 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`.
2795
2796For example, to set an `http` proxy, add the following to your settings:
2797
2798```json
2799{
2800  "proxy": "http://127.0.0.1:10809"
2801}
2802```
2803
2804Or to set a `socks5` proxy:
2805
2806```json
2807{
2808  "proxy": "socks5h://localhost:10808"
2809}
2810```
2811
2812If 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.
2813
2814## On Last Window Closed
2815
2816- Description: What to do when the last window is closed
2817- Setting: `on_last_window_closed`
2818- Default: `"platform_default"`
2819
2820**Options**
2821
28221. Use platform default behavior:
2823
2824```json
2825{
2826  "on_last_window_closed": "platform_default"
2827}
2828```
2829
28302. Always quit the application:
2831
2832```json
2833{
2834  "on_last_window_closed": "quit_app"
2835}
2836```
2837
2838## Profiles
2839
2840- Description: Configuration profiles that can be applied on top of existing settings
2841- Setting: `profiles`
2842- Default: `{}`
2843
2844**Options**
2845
2846Configuration object for defining settings profiles. Example:
2847
2848```json
2849{
2850  "profiles": {
2851    "presentation": {
2852      "buffer_font_size": 20,
2853      "ui_font_size": 18,
2854      "theme": "One Light"
2855    }
2856  }
2857}
2858```
2859
2860## Preview tabs
2861
2862- Description:
2863  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. \
2864   There are several ways to convert a preview tab into a regular tab:
2865
2866  - Double-clicking on the file
2867  - Double-clicking on the tab header
2868  - Using the {#action project_panel::OpenPermanent} action
2869  - Editing the file
2870  - Dragging the file to a different pane
2871
2872- Setting: `preview_tabs`
2873- Default:
2874
2875```json
2876"preview_tabs": {
2877  "enabled": true,
2878  "enable_preview_from_file_finder": false,
2879  "enable_preview_from_code_navigation": false,
2880}
2881```
2882
2883### Enable preview from file finder
2884
2885- Description: Determines whether to open files in preview mode when selected from the file finder.
2886- Setting: `enable_preview_from_file_finder`
2887- Default: `false`
2888
2889**Options**
2890
2891`boolean` values
2892
2893### Enable preview from code navigation
2894
2895- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
2896- Setting: `enable_preview_from_code_navigation`
2897- Default: `false`
2898
2899**Options**
2900
2901`boolean` values
2902
2903## File Finder
2904
2905### File Icons
2906
2907- Description: Whether to show file icons in the file finder.
2908- Setting: `file_icons`
2909- Default: `true`
2910
2911### Modal Max Width
2912
2913- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
2914- Setting: `modal_max_width`
2915- Default: `small`
2916
2917### Skip Focus For Active In Search
2918
2919- Description: Determines whether the file finder should skip focus for the active file in search results.
2920- Setting: `skip_focus_for_active_in_search`
2921- Default: `true`
2922
2923## Pane Split Direction Horizontal
2924
2925- Description: The direction that you want to split panes horizontally
2926- Setting: `pane_split_direction_horizontal`
2927- Default: `"up"`
2928
2929**Options**
2930
29311. Split upward:
2932
2933```json
2934{
2935  "pane_split_direction_horizontal": "up"
2936}
2937```
2938
29392. Split downward:
2940
2941```json
2942{
2943  "pane_split_direction_horizontal": "down"
2944}
2945```
2946
2947## Pane Split Direction Vertical
2948
2949- Description: The direction that you want to split panes vertically
2950- Setting: `pane_split_direction_vertical`
2951- Default: `"left"`
2952
2953**Options**
2954
29551. Split to the left:
2956
2957```json
2958{
2959  "pane_split_direction_vertical": "left"
2960}
2961```
2962
29632. Split to the right:
2964
2965```json
2966{
2967  "pane_split_direction_vertical": "right"
2968}
2969```
2970
2971## Preferred Line Length
2972
2973- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
2974- Setting: `preferred_line_length`
2975- Default: `80`
2976
2977**Options**
2978
2979`integer` values
2980
2981## Private Files
2982
2983- Description: Globs to match against file paths to determine if a file is private
2984- Setting: `private_files`
2985- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/secrets.yml"]`
2986
2987**Options**
2988
2989List of `string` glob patterns
2990
2991## Projects Online By Default
2992
2993- Description: Whether or not to show the online projects view by default.
2994- Setting: `projects_online_by_default`
2995- Default: `true`
2996
2997**Options**
2998
2999`boolean` values
3000
3001## Read SSH Config
3002
3003- Description: Whether to read SSH configuration files
3004- Setting: `read_ssh_config`
3005- Default: `true`
3006
3007**Options**
3008
3009`boolean` values
3010
3011## Redact Private Values
3012
3013- Description: Hide the values of variables from visual display in private files
3014- Setting: `redact_private_values`
3015- Default: `false`
3016
3017**Options**
3018
3019`boolean` values
3020
3021## Relative Line Numbers
3022
3023- Description: Whether to show relative line numbers in the gutter
3024- Setting: `relative_line_numbers`
3025- Default: `false`
3026
3027**Options**
3028
3029`boolean` values
3030
3031## Remove Trailing Whitespace On Save
3032
3033- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
3034- Setting: `remove_trailing_whitespace_on_save`
3035- Default: `true`
3036
3037**Options**
3038
3039`boolean` values
3040
3041## Resize All Panels In Dock
3042
3043- Description: Whether to resize all the panels in a dock when resizing the dock. Can be a combination of "left", "right" and "bottom".
3044- Setting: `resize_all_panels_in_dock`
3045- Default: `["left"]`
3046
3047**Options**
3048
3049List of strings containing any combination of:
3050
3051- `"left"`: Resize left dock panels together
3052- `"right"`: Resize right dock panels together
3053- `"bottom"`: Resize bottom dock panels together
3054
3055## Restore on File Reopen
3056
3057- Description: Whether to attempt to restore previous file's state when opening it again. The state is stored per pane.
3058- Setting: `restore_on_file_reopen`
3059- Default: `true`
3060
3061**Options**
3062
3063`boolean` values
3064
3065## Restore on Startup
3066
3067- Description: Controls session restoration on startup.
3068- Setting: `restore_on_startup`
3069- Default: `last_session`
3070
3071**Options**
3072
30731. Restore all workspaces that were open when quitting Zed:
3074
3075```json
3076{
3077  "restore_on_startup": "last_session"
3078}
3079```
3080
30812. Restore the workspace that was closed last:
3082
3083```json
3084{
3085  "restore_on_startup": "last_workspace"
3086}
3087```
3088
30893. Always start with an empty editor:
3090
3091```json
3092{
3093  "restore_on_startup": "none"
3094}
3095```
3096
3097## Scroll Beyond Last Line
3098
3099- Description: Whether the editor will scroll beyond the last line
3100- Setting: `scroll_beyond_last_line`
3101- Default: `"one_page"`
3102
3103**Options**
3104
31051. Scroll one page beyond the last line by one page:
3106
3107```json
3108{
3109  "scroll_beyond_last_line": "one_page"
3110}
3111```
3112
31132. The editor will scroll beyond the last line by the same amount of lines as `vertical_scroll_margin`:
3114
3115```json
3116{
3117  "scroll_beyond_last_line": "vertical_scroll_margin"
3118}
3119```
3120
31213. The editor will not scroll beyond the last line:
3122
3123```json
3124{
3125  "scroll_beyond_last_line": "off"
3126}
3127```
3128
3129**Options**
3130
3131`boolean` values
3132
3133## Scroll Sensitivity
3134
3135- Description: Scroll sensitivity multiplier. This multiplier is applied to both the horizontal and vertical delta values while scrolling.
3136- Setting: `scroll_sensitivity`
3137- Default: `1.0`
3138
3139**Options**
3140
3141Positive `float` values
3142
3143### Fast Scroll Sensitivity
3144
3145- Description: Scroll sensitivity multiplier for fast scrolling. This multiplier is applied to both the horizontal and vertical delta values while scrolling. Fast scrolling happens when a user holds the alt or option key while scrolling.
3146- Setting: `fast_scroll_sensitivity`
3147- Default: `4.0`
3148
3149**Options**
3150
3151Positive `float` values
3152
3153### Horizontal Scroll Margin
3154
3155- Description: The number of characters to keep on either side when scrolling with the mouse
3156- Setting: `horizontal_scroll_margin`
3157- Default: `5`
3158
3159**Options**
3160
3161Non-negative `integer` values
3162
3163### Vertical Scroll Margin
3164
3165- Description: The number of lines to keep above/below the cursor when scrolling with the keyboard
3166- Setting: `vertical_scroll_margin`
3167- Default: `3`
3168
3169**Options**
3170
3171Non-negative `integer` values
3172
3173## Search
3174
3175- Description: Search options to enable by default when opening new project and buffer searches.
3176- Setting: `search`
3177- Default:
3178
3179```json
3180"search": {
3181  "whole_word": false,
3182  "case_sensitive": false,
3183  "include_ignored": false,
3184  "regex": false
3185},
3186```
3187
3188## Search Wrap
3189
3190- Description: If `search_wrap` is disabled, search result do not wrap around the end of the file
3191- Setting: `search_wrap`
3192- Default: `true`
3193
3194## Seed Search Query From Cursor
3195
3196- Description: When to populate a new search's query based on the text under the cursor.
3197- Setting: `seed_search_query_from_cursor`
3198- Default: `always`
3199
3200**Options**
3201
32021. `always` always populate the search query with the word under the cursor
32032. `selection` only populate the search query when there is text selected
32043. `never` never populate the search query
3205
3206## Use Smartcase Search
3207
3208- 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. \
3209  This applies to both in-file searches and project-wide searches.
3210- Setting: `use_smartcase_search`
3211- Default: `false`
3212
3213**Options**
3214
3215`boolean` values
3216
3217Examples:
3218
3219- Searching for "function" would match "function", "Function", "FUNCTION", etc.
3220- Searching for "Function" would only match "Function", not "function" or "FUNCTION"
3221
3222## Show Call Status Icon
3223
3224- Description: Whether or not to show the call status icon in the status bar.
3225- Setting: `show_call_status_icon`
3226- Default: `true`
3227
3228**Options**
3229
3230`boolean` values
3231
3232## Completions
3233
3234- Description: Controls how completions are processed for this language.
3235- Setting: `completions`
3236- Default:
3237
3238```json
3239{
3240  "completions": {
3241    "words": "fallback",
3242    "words_min_length": 3,
3243    "lsp": true,
3244    "lsp_fetch_timeout_ms": 0,
3245    "lsp_insert_mode": "replace_suffix"
3246  }
3247}
3248```
3249
3250### Words
3251
3252- Description: Controls how words are completed. For large documents, not all words may be fetched for completion.
3253- Setting: `words`
3254- Default: `fallback`
3255
3256**Options**
3257
32581. `enabled` - Always fetch document's words for completions along with LSP completions
32592. `fallback` - Only if LSP response errors or times out, use document's words to show completions
32603. `disabled` - Never fetch or complete document's words for completions (word-based completions can still be queried via a separate action)
3261
3262### Min Words Query Length
3263
3264- Description: Minimum number of characters required to automatically trigger word-based completions.
3265  Before that value, it's still possible to trigger the words-based completion manually with the corresponding editor command.
3266- Setting: `words_min_length`
3267- Default: `3`
3268
3269**Options**
3270
3271Positive integer values
3272
3273### LSP
3274
3275- Description: Whether to fetch LSP completions or not.
3276- Setting: `lsp`
3277- Default: `true`
3278
3279**Options**
3280
3281`boolean` values
3282
3283### LSP Fetch Timeout (ms)
3284
3285- Description: When fetching LSP completions, determines how long to wait for a response of a particular server. When set to 0, waits indefinitely.
3286- Setting: `lsp_fetch_timeout_ms`
3287- Default: `0`
3288
3289**Options**
3290
3291`integer` values representing milliseconds
3292
3293### LSP Insert Mode
3294
3295- Description: Controls what range to replace when accepting LSP completions.
3296- Setting: `lsp_insert_mode`
3297- Default: `replace_suffix`
3298
3299**Options**
3300
33011. `insert` - Replaces text before the cursor, using the `insert` range described in the LSP specification
33022. `replace` - Replaces text before and after the cursor, using the `replace` range described in the LSP specification
33033. `replace_subsequence` - Behaves like `"replace"` if the text that would be replaced is a subsequence of the completion text, and like `"insert"` otherwise
33044. `replace_suffix` - Behaves like `"replace"` if the text after the cursor is a suffix of the completion, and like `"insert"` otherwise
3305
3306## Show Completions On Input
3307
3308- Description: Whether or not to show completions as you type.
3309- Setting: `show_completions_on_input`
3310- Default: `true`
3311
3312**Options**
3313
3314`boolean` values
3315
3316## Show Completion Documentation
3317
3318- Description: Whether to display inline and alongside documentation for items in the completions menu.
3319- Setting: `show_completion_documentation`
3320- Default: `true`
3321
3322**Options**
3323
3324`boolean` values
3325
3326## Show Edit Predictions
3327
3328- Description: Whether to show edit predictions as you type or manually by triggering `editor::ShowEditPrediction`.
3329- Setting: `show_edit_predictions`
3330- Default: `true`
3331
3332**Options**
3333
3334`boolean` values
3335
3336## Show Whitespaces
3337
3338- Description: Whether or not to render whitespace characters in the editor.
3339- Setting: `show_whitespaces`
3340- Default: `selection`
3341
3342**Options**
3343
33441. `all`
33452. `selection`
33463. `none`
33474. `boundary`
3348
3349## Soft Wrap
3350
3351- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
3352- Setting: `soft_wrap`
3353- Default: `none`
3354
3355**Options**
3356
33571. `none` to avoid wrapping generally, unless the line is too long
33582. `prefer_line` (deprecated, same as `none`)
33593. `editor_width` to wrap lines that overflow the editor width
33604. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
33615. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
3362
3363## Show Wrap Guides
3364
3365- Description: Whether to show wrap guides (vertical rulers) in the editor. Setting this to true will show a guide at the 'preferred_line_length' value if 'soft_wrap' is set to 'preferred_line_length', and will show any additional guides as specified by the 'wrap_guides' setting.
3366- Setting: `show_wrap_guides`
3367- Default: `true`
3368
3369**Options**
3370
3371`boolean` values
3372
3373## Use On Type Format
3374
3375- Description: Whether to use additional LSP queries to format (and amend) the code after every "trigger" symbol input, defined by LSP server capabilities
3376- Setting: `use_on_type_format`
3377- Default: `true`
3378
3379**Options**
3380
3381`boolean` values
3382
3383## Use Auto Surround
3384
3385- Description: Whether to automatically surround selected text when typing opening parenthesis, bracket, brace, single or double quote characters. For example, when you select text and type (, Zed will surround the text with ().
3386- Setting: `use_auto_surround`
3387- Default: `true`
3388
3389**Options**
3390
3391`boolean` values
3392
3393## Use System Path Prompts
3394
3395- Description: Whether to use the system provided dialogs for Open and Save As. When set to false, Zed will use the built-in keyboard-first pickers.
3396- Setting: `use_system_path_prompts`
3397- Default: `true`
3398
3399**Options**
3400
3401`boolean` values
3402
3403## Use System Prompts
3404
3405- Description: Whether to use the system provided dialogs for prompts, such as confirmation prompts. When set to false, Zed will use its built-in prompts. Note that on Linux, this option is ignored and Zed will always use the built-in prompts.
3406- Setting: `use_system_prompts`
3407- Default: `true`
3408
3409**Options**
3410
3411`boolean` values
3412
3413## Wrap Guides (Vertical Rulers)
3414
3415- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
3416- Setting: `wrap_guides`
3417- Default: []
3418
3419**Options**
3420
3421List of `integer` column numbers
3422
3423## Tab Size
3424
3425- Description: The number of spaces to use for each tab character.
3426- Setting: `tab_size`
3427- Default: `4`
3428
3429**Options**
3430
3431`integer` values
3432
3433## Tasks
3434
3435- Description: Configuration for tasks that can be run within Zed
3436- Setting: `tasks`
3437- Default:
3438
3439```json
3440{
3441  "tasks": {
3442    "variables": {},
3443    "enabled": true,
3444    "prefer_lsp": false
3445  }
3446}
3447```
3448
3449**Options**
3450
3451- `variables`: Custom variables for task configuration
3452- `enabled`: Whether tasks are enabled
3453- `prefer_lsp`: Whether to prefer LSP-provided tasks over Zed language extension ones
3454
3455## Telemetry
3456
3457- Description: Control what info is collected by Zed.
3458- Setting: `telemetry`
3459- Default:
3460
3461```json
3462"telemetry": {
3463  "diagnostics": true,
3464  "metrics": true
3465},
3466```
3467
3468**Options**
3469
3470### Diagnostics
3471
3472- Description: Setting for sending debug-related data, such as crash reports.
3473- Setting: `diagnostics`
3474- Default: `true`
3475
3476**Options**
3477
3478`boolean` values
3479
3480### Metrics
3481
3482- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
3483- Setting: `metrics`
3484- Default: `true`
3485
3486**Options**
3487
3488`boolean` values
3489
3490## Terminal
3491
3492- Description: Configuration for the terminal.
3493- Setting: `terminal`
3494- Default:
3495
3496```json
3497{
3498  "terminal": {
3499    "alternate_scroll": "off",
3500    "blinking": "terminal_controlled",
3501    "copy_on_select": false,
3502    "keep_selection_on_copy": false,
3503    "dock": "bottom",
3504    "default_width": 640,
3505    "default_height": 320,
3506    "detect_venv": {
3507      "on": {
3508        "directories": [".env", "env", ".venv", "venv"],
3509        "activate_script": "default"
3510      }
3511    },
3512    "env": {},
3513    "font_family": null,
3514    "font_features": null,
3515    "font_size": null,
3516    "line_height": "comfortable",
3517    "minimum_contrast": 45,
3518    "option_as_meta": false,
3519    "button": true,
3520    "shell": "system",
3521    "toolbar": {
3522      "breadcrumbs": true
3523    },
3524    "working_directory": "current_project_directory",
3525    "scrollbar": {
3526      "show": null
3527    }
3528  }
3529}
3530```
3531
3532### Terminal: Dock
3533
3534- Description: Control the position of the dock
3535- Setting: `dock`
3536- Default: `bottom`
3537
3538**Options**
3539
3540`"bottom"`, `"left"` or `"right"`
3541
3542### Terminal: Alternate Scroll
3543
3544- 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.
3545- Setting: `alternate_scroll`
3546- Default: `off`
3547
3548**Options**
3549
35501. Default alternate scroll mode to off
3551
3552```json
3553{
3554  "terminal": {
3555    "alternate_scroll": "off"
3556  }
3557}
3558```
3559
35602. Default alternate scroll mode to on
3561
3562```json
3563{
3564  "terminal": {
3565    "alternate_scroll": "on"
3566  }
3567}
3568```
3569
3570### Terminal: Blinking
3571
3572- Description: Set the cursor blinking behavior in the terminal
3573- Setting: `blinking`
3574- Default: `terminal_controlled`
3575
3576**Options**
3577
35781. Never blink the cursor, ignore the terminal mode
3579
3580```json
3581{
3582  "terminal": {
3583    "blinking": "off"
3584  }
3585}
3586```
3587
35882. Default the cursor blink to off, but allow the terminal to turn blinking on
3589
3590```json
3591{
3592  "terminal": {
3593    "blinking": "terminal_controlled"
3594  }
3595}
3596```
3597
35983. Always blink the cursor, ignore the terminal mode
3599
3600```json
3601{
3602  "terminal": {
3603    "blinking": "on"
3604  }
3605}
3606```
3607
3608### Terminal: Copy On Select
3609
3610- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
3611- Setting: `copy_on_select`
3612- Default: `false`
3613
3614**Options**
3615
3616`boolean` values
3617
3618**Example**
3619
3620```json
3621{
3622  "terminal": {
3623    "copy_on_select": true
3624  }
3625}
3626```
3627
3628### Terminal: Cursor Shape
3629
3630- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
3631- Setting: `cursor_shape`
3632- Default: `null` (defaults to block)
3633
3634**Options**
3635
36361. A block that surrounds the following character
3637
3638```json
3639{
3640  "terminal": {
3641    "cursor_shape": "block"
3642  }
3643}
3644```
3645
36462. A vertical bar
3647
3648```json
3649{
3650  "terminal": {
3651    "cursor_shape": "bar"
3652  }
3653}
3654```
3655
36563. An underline / underscore that runs along the following character
3657
3658```json
3659{
3660  "terminal": {
3661    "cursor_shape": "underline"
3662  }
3663}
3664```
3665
36664. A box drawn around the following character
3667
3668```json
3669{
3670  "terminal": {
3671    "cursor_shape": "hollow"
3672  }
3673}
3674```
3675
3676### Terminal: Keep Selection On Copy
3677
3678- Description: Whether or not to keep the selection in the terminal after copying text.
3679- Setting: `keep_selection_on_copy`
3680- Default: `false`
3681
3682**Options**
3683
3684`boolean` values
3685
3686**Example**
3687
3688```json
3689{
3690  "terminal": {
3691    "keep_selection_on_copy": true
3692  }
3693}
3694```
3695
3696### Terminal: Env
3697
3698- 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
3699- Setting: `env`
3700- Default: `{}`
3701
3702**Example**
3703
3704```json
3705{
3706  "terminal": {
3707    "env": {
3708      "ZED": "1",
3709      "KEY": "value1:value2"
3710    }
3711  }
3712}
3713```
3714
3715### Terminal: Font Size
3716
3717- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
3718- Setting: `font_size`
3719- Default: `null`
3720
3721**Options**
3722
3723`integer` values
3724
3725```json
3726{
3727  "terminal": {
3728    "font_size": 15
3729  }
3730}
3731```
3732
3733### Terminal: Font Family
3734
3735- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
3736- Setting: `font_family`
3737- Default: `null`
3738
3739**Options**
3740
3741The name of any font family installed on the user's system
3742
3743```json
3744{
3745  "terminal": {
3746    "font_family": "Berkeley Mono"
3747  }
3748}
3749```
3750
3751### Terminal: Font Features
3752
3753- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
3754- Setting: `font_features`
3755- Default: `null`
3756- Platform: macOS and Windows.
3757
3758**Options**
3759
3760See Buffer Font Features
3761
3762```json
3763{
3764  "terminal": {
3765    "font_features": {
3766      "calt": false
3767      // See Buffer Font Features for more features
3768    }
3769  }
3770}
3771```
3772
3773### Terminal: Line Height
3774
3775- Description: Set the terminal's line height.
3776- Setting: `line_height`
3777- Default: `comfortable`
3778
3779**Options**
3780
37811. Use a line height that's `comfortable` for reading, 1.618. (default)
3782
3783```json
3784{
3785  "terminal": {
3786    "line_height": "comfortable"
3787  }
3788}
3789```
3790
37912. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
3792
3793```json
3794{
3795  "terminal": {
3796    "line_height": "standard"
3797  }
3798}
3799```
3800
38013.  Use a custom line height.
3802
3803```json
3804{
3805  "terminal": {
3806    "line_height": {
3807      "custom": 2
3808    }
3809  }
3810}
3811```
3812
3813### Terminal: Minimum Contrast
3814
3815- 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.
3816- Setting: `minimum_contrast`
3817- Default: `45`
3818
3819**Options**
3820
3821`integer` values from 0 to 106. Common recommended values:
3822
3823- `0`: No contrast adjustment
3824- `45`: Minimum for large fluent text (default)
3825- `60`: Minimum for other content text
3826- `75`: Minimum for body text
3827- `90`: Preferred for body text
3828
3829```json
3830{
3831  "terminal": {
3832    "minimum_contrast": 45
3833  }
3834}
3835```
3836
3837### Terminal: Option As Meta
3838
3839- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
3840- Setting: `option_as_meta`
3841- Default: `false`
3842
3843**Options**
3844
3845`boolean` values
3846
3847```json
3848{
3849  "terminal": {
3850    "option_as_meta": true
3851  }
3852}
3853```
3854
3855### Terminal: Shell
3856
3857- Description: What shell to use when launching the terminal.
3858- Setting: `shell`
3859- Default: `system`
3860
3861**Options**
3862
38631. Use the system's default terminal configuration (usually the `/etc/passwd` file).
3864
3865```json
3866{
3867  "terminal": {
3868    "shell": "system"
3869  }
3870}
3871```
3872
38732. A program to launch:
3874
3875```json
3876{
3877  "terminal": {
3878    "shell": {
3879      "program": "sh"
3880    }
3881  }
3882}
3883```
3884
38853. A program with arguments:
3886
3887```json
3888{
3889  "terminal": {
3890    "shell": {
3891      "with_arguments": {
3892        "program": "/bin/bash",
3893        "args": ["--login"]
3894      }
3895    }
3896  }
3897}
3898```
3899
3900## Terminal: Detect Virtual Environments {#terminal-detect_venv}
3901
3902- 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.
3903- Setting: `detect_venv`
3904- Default:
3905
3906```json
3907{
3908  "terminal": {
3909    "detect_venv": {
3910      "on": {
3911        // Default directories to search for virtual environments, relative
3912        // to the current working directory. We recommend overriding this
3913        // in your project's settings, rather than globally.
3914        "directories": [".env", "env", ".venv", "venv"],
3915        // Can also be `csh`, `fish`, and `nushell`
3916        "activate_script": "default"
3917      }
3918    }
3919  }
3920}
3921```
3922
3923Disable with:
3924
3925```json
3926{
3927  "terminal": {
3928    "detect_venv": "off"
3929  }
3930}
3931```
3932
3933## Terminal: Toolbar
3934
3935- Description: Whether or not to show various elements in the terminal toolbar.
3936- Setting: `toolbar`
3937- Default:
3938
3939```json
3940{
3941  "terminal": {
3942    "toolbar": {
3943      "breadcrumbs": true
3944    }
3945  }
3946}
3947```
3948
3949**Options**
3950
3951At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
3952
3953If the terminal title is empty, the breadcrumbs won't be shown.
3954
3955The shell running in the terminal needs to be configured to emit the title.
3956
3957Example command to set the title: `echo -e "\e]2;New Title\007";`
3958
3959### Terminal: Button
3960
3961- Description: Control to show or hide the terminal button in the status bar
3962- Setting: `button`
3963- Default: `true`
3964
3965**Options**
3966
3967`boolean` values
3968
3969```json
3970{
3971  "terminal": {
3972    "button": false
3973  }
3974}
3975```
3976
3977### Terminal: Working Directory
3978
3979- Description: What working directory to use when launching the terminal.
3980- Setting: `working_directory`
3981- Default: `"current_project_directory"`
3982
3983**Options**
3984
39851. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
3986
3987```json
3988{
3989  "terminal": {
3990    "working_directory": "current_project_directory"
3991  }
3992}
3993```
3994
39952. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
3996
3997```json
3998{
3999  "terminal": {
4000    "working_directory": "first_project_directory"
4001  }
4002}
4003```
4004
40053. Always use this platform's home directory (if we can find it)
4006
4007```json
4008{
4009  "terminal": {
4010    "working_directory": "always_home"
4011  }
4012}
4013```
4014
40154. 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.
4016
4017```json
4018{
4019  "terminal": {
4020    "working_directory": {
4021      "always": {
4022        "directory": "~/zed/projects/"
4023      }
4024    }
4025  }
4026}
4027```
4028
4029## Theme
4030
4031- 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.
4032- Setting: `theme`
4033- Default: `One Dark`
4034
4035### Theme Object
4036
4037- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
4038- Setting: `theme`
4039- Default:
4040
4041```json
4042"theme": {
4043  "mode": "system",
4044  "dark": "One Dark",
4045  "light": "One Light"
4046},
4047```
4048
4049### Mode
4050
4051- Description: Specify theme mode.
4052- Setting: `mode`
4053- Default: `system`
4054
4055**Options**
4056
40571. Set the theme to dark mode
4058
4059```json
4060{
4061  "mode": "dark"
4062}
4063```
4064
40652. Set the theme to light mode
4066
4067```json
4068{
4069  "mode": "light"
4070}
4071```
4072
40733. Set the theme to system mode
4074
4075```json
4076{
4077  "mode": "system"
4078}
4079```
4080
4081### Dark
4082
4083- Description: The name of the dark Zed theme to use for the UI.
4084- Setting: `dark`
4085- Default: `One Dark`
4086
4087**Options**
4088
4089Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
4090
4091### Light
4092
4093- Description: The name of the light Zed theme to use for the UI.
4094- Setting: `light`
4095- Default: `One Light`
4096
4097**Options**
4098
4099Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
4100
4101## Title Bar
4102
4103- Description: Whether or not to show various elements in the title bar
4104- Setting: `title_bar`
4105- Default:
4106
4107```json
4108"title_bar": {
4109  "show_branch_icon": false,
4110  "show_branch_name": true,
4111  "show_project_items": true,
4112  "show_onboarding_banner": true,
4113  "show_user_picture": true,
4114  "show_sign_in": true,
4115  "show_menus": false
4116}
4117```
4118
4119**Options**
4120
4121- `show_branch_icon`: Whether to show the branch icon beside branch switcher in the titlebar
4122- `show_branch_name`: Whether to show the branch name button in the titlebar
4123- `show_project_items`: Whether to show the project host and name in the titlebar
4124- `show_onboarding_banner`: Whether to show onboarding banners in the titlebar
4125- `show_user_picture`: Whether to show user picture in the titlebar
4126- `show_sign_in`: Whether to show the sign in button in the titlebar
4127- `show_menus`: Whether to show the menus in the titlebar
4128
4129## Vim
4130
4131- Description: Whether or not to enable vim mode.
4132- Setting: `vim_mode`
4133- Default: `false`
4134
4135## When Closing With No Tabs
4136
4137- Description: Whether the window should be closed when using 'close active item' on a window with no tabs
4138- Setting: `when_closing_with_no_tabs`
4139- Default: `"platform_default"`
4140
4141**Options**
4142
41431. Use platform default behavior:
4144
4145```json
4146{
4147  "when_closing_with_no_tabs": "platform_default"
4148}
4149```
4150
41512. Always close the window:
4152
4153```json
4154{
4155  "when_closing_with_no_tabs": "close_window"
4156}
4157```
4158
41593. Never close the window:
4160
4161```json
4162{
4163  "when_closing_with_no_tabs": "keep_window_open"
4164}
4165```
4166
4167## Project Panel
4168
4169- Description: Customize project panel
4170- Setting: `project_panel`
4171- Default:
4172
4173```json
4174{
4175  "project_panel": {
4176    "button": true,
4177    "default_width": 240,
4178    "dock": "left",
4179    "entry_spacing": "comfortable",
4180    "file_icons": true,
4181    "folder_icons": true,
4182    "git_status": true,
4183    "indent_size": 20,
4184    "auto_reveal_entries": true,
4185    "auto_fold_dirs": true,
4186    "drag_and_drop": true,
4187    "scrollbar": {
4188      "show": null
4189    },
4190    "sticky_scroll": true,
4191    "show_diagnostics": "all",
4192    "indent_guides": {
4193      "show": "always"
4194    },
4195    "hide_root": false,
4196    "starts_open": true
4197  }
4198}
4199```
4200
4201### Dock
4202
4203- Description: Control the position of the dock
4204- Setting: `dock`
4205- Default: `left`
4206
4207**Options**
4208
42091. Default dock position to left
4210
4211```json
4212{
4213  "dock": "left"
4214}
4215```
4216
42172. Default dock position to right
4218
4219```json
4220{
4221  "dock": "right"
4222}
4223```
4224
4225### Entry Spacing
4226
4227- Description: Spacing between worktree entries
4228- Setting: `entry_spacing`
4229- Default: `comfortable`
4230
4231**Options**
4232
42331. Comfortable entry spacing
4234
4235```json
4236{
4237  "entry_spacing": "comfortable"
4238}
4239```
4240
42412. Standard entry spacing
4242
4243```json
4244{
4245  "entry_spacing": "standard"
4246}
4247```
4248
4249### Git Status
4250
4251- Description: Indicates newly created and updated files
4252- Setting: `git_status`
4253- Default: `true`
4254
4255**Options**
4256
42571. Default enable git status
4258
4259```json
4260{
4261  "git_status": true
4262}
4263```
4264
42652. Default disable git status
4266
4267```json
4268{
4269  "git_status": false
4270}
4271```
4272
4273### Default Width
4274
4275- Description: Customize default width taken by project panel
4276- Setting: `default_width`
4277- Default: `240`
4278
4279**Options**
4280
4281`float` values
4282
4283### Auto Reveal Entries
4284
4285- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
4286- Setting: `auto_reveal_entries`
4287- Default: `true`
4288
4289**Options**
4290
42911. Enable auto reveal entries
4292
4293```json
4294{
4295  "auto_reveal_entries": true
4296}
4297```
4298
42992. Disable auto reveal entries
4300
4301```json
4302{
4303  "auto_reveal_entries": false
4304}
4305```
4306
4307### Auto Fold Dirs
4308
4309- Description: Whether to fold directories automatically when directory has only one directory inside.
4310- Setting: `auto_fold_dirs`
4311- Default: `true`
4312
4313**Options**
4314
43151. Enable auto fold dirs
4316
4317```json
4318{
4319  "auto_fold_dirs": true
4320}
4321```
4322
43232. Disable auto fold dirs
4324
4325```json
4326{
4327  "auto_fold_dirs": false
4328}
4329```
4330
4331### Indent Size
4332
4333- Description: Amount of indentation (in pixels) for nested items.
4334- Setting: `indent_size`
4335- Default: `20`
4336
4337### Indent Guides: Show
4338
4339- Description: Whether to show indent guides in the project panel.
4340- Setting: `indent_guides`
4341- Default:
4342
4343```json
4344"indent_guides": {
4345  "show": "always"
4346}
4347```
4348
4349**Options**
4350
43511. Show indent guides in the project panel
4352
4353```json
4354{
4355  "indent_guides": {
4356    "show": "always"
4357  }
4358}
4359```
4360
43612. Hide indent guides in the project panel
4362
4363```json
4364{
4365  "indent_guides": {
4366    "show": "never"
4367  }
4368}
4369```
4370
4371### Scrollbar: Show
4372
4373- 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.
4374- Setting: `scrollbar`
4375- Default:
4376
4377```json
4378"scrollbar": {
4379  "show": null
4380}
4381```
4382
4383**Options**
4384
43851. Show scrollbar in the project panel
4386
4387```json
4388{
4389  "scrollbar": {
4390    "show": "always"
4391  }
4392}
4393```
4394
43952. Hide scrollbar in the project panel
4396
4397```json
4398{
4399  "scrollbar": {
4400    "show": "never"
4401  }
4402}
4403```
4404
4405## Agent
4406
4407Visit [the Configuration page](./ai/configuration.md) under the AI section to learn more about all the agent-related settings.
4408
4409## Collaboration Panel
4410
4411- Description: Customizations for the collaboration panel.
4412- Setting: `collaboration_panel`
4413- Default:
4414
4415```json
4416{
4417  "collaboration_panel": {
4418    "button": true,
4419    "dock": "left",
4420    "default_width": 240
4421  }
4422}
4423```
4424
4425**Options**
4426
4427- `button`: Whether to show the collaboration panel button in the status bar
4428- `dock`: Where to dock the collaboration panel. Can be `left` or `right`
4429- `default_width`: Default width of the collaboration panel
4430
4431## Debugger
4432
4433- Description: Configuration for debugger panel and settings
4434- Setting: `debugger`
4435- Default:
4436
4437```json
4438{
4439  "debugger": {
4440    "stepping_granularity": "line",
4441    "save_breakpoints": true,
4442    "dock": "bottom",
4443    "button": true
4444  }
4445}
4446```
4447
4448See the [debugger page](./debugger.md) for more information about debugging support within Zed.
4449
4450## Git Panel
4451
4452- Description: Setting to customize the behavior of the git panel.
4453- Setting: `git_panel`
4454- Default:
4455
4456```json
4457{
4458  "git_panel": {
4459    "button": true,
4460    "dock": "left",
4461    "default_width": 360,
4462    "status_style": "icon",
4463    "fallback_branch_name": "main",
4464    "sort_by_path": false,
4465    "collapse_untracked_diff": false,
4466    "scrollbar": {
4467      "show": null
4468    }
4469  }
4470}
4471```
4472
4473**Options**
4474
4475- `button`: Whether to show the git panel button in the status bar
4476- `dock`: Where to dock the git panel. Can be `left` or `right`
4477- `default_width`: Default width of the git panel
4478- `status_style`: How to display git status. Can be `label_color` or `icon`
4479- `fallback_branch_name`: What branch name to use if `init.defaultBranch` is not set
4480- `sort_by_path`: Whether to sort entries in the panel by path or by status (the default)
4481- `collapse_untracked_diff`: Whether to collapse untracked files in the diff panel
4482- `scrollbar`: When to show the scrollbar in the git panel
4483
4484## Outline Panel
4485
4486- Description: Customize outline Panel
4487- Setting: `outline_panel`
4488- Default:
4489
4490```json
4491"outline_panel": {
4492  "button": true,
4493  "default_width": 300,
4494  "dock": "left",
4495  "file_icons": true,
4496  "folder_icons": true,
4497  "git_status": true,
4498  "indent_size": 20,
4499  "auto_reveal_entries": true,
4500  "auto_fold_dirs": true,
4501  "indent_guides": {
4502    "show": "always"
4503  },
4504  "scrollbar": {
4505    "show": null
4506  }
4507}
4508```
4509
4510## Calls
4511
4512- Description: Customize behavior when participating in a call
4513- Setting: `calls`
4514- Default:
4515
4516```json
4517"calls": {
4518  // Join calls with the microphone live by default
4519  "mute_on_join": false,
4520  // Share your project when you are the first to join a channel
4521  "share_on_join": false
4522},
4523```
4524
4525## Unnecessary Code Fade
4526
4527- Description: How much to fade out unused code.
4528- Setting: `unnecessary_code_fade`
4529- Default: `0.3`
4530
4531**Options**
4532
4533Float values between `0.0` and `0.9`, where:
4534
4535- `0.0` means no fading (unused code looks the same as used code)
4536- `0.9` means maximum fading (unused code is very faint but still visible)
4537
4538**Example**
4539
4540```json
4541{
4542  "unnecessary_code_fade": 0.5
4543}
4544```
4545
4546## UI Font Family
4547
4548- Description: The name of the font to use for text in the UI.
4549- Setting: `ui_font_family`
4550- Default: `.ZedSans`. This currently aliases to [IBM Plex](https://www.ibm.com/plex/).
4551
4552**Options**
4553
4554The 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).
4555
4556## UI Font Features
4557
4558- Description: The OpenType features to enable for text in the UI.
4559- Setting: `ui_font_features`
4560- Default:
4561
4562```json
4563"ui_font_features": {
4564  "calt": false
4565}
4566```
4567
4568- Platform: macOS and Windows.
4569
4570**Options**
4571
4572Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
4573
4574For example, to disable font ligatures, add the following to your settings:
4575
4576```json
4577{
4578  "ui_font_features": {
4579    "calt": false
4580  }
4581}
4582```
4583
4584You can also set other OpenType features, like setting `cv01` to `7`:
4585
4586```json
4587{
4588  "ui_font_features": {
4589    "cv01": 7
4590  }
4591}
4592```
4593
4594## UI Font Fallbacks
4595
4596- Description: The font fallbacks to use for text in the UI.
4597- Setting: `ui_font_fallbacks`
4598- Default: `null`
4599- Platform: macOS and Windows.
4600
4601**Options**
4602
4603For example, to use `Nerd Font` as a fallback, add the following to your settings:
4604
4605```json
4606{
4607  "ui_font_fallbacks": ["Nerd Font"]
4608}
4609```
4610
4611## UI Font Size
4612
4613- Description: The default font size for text in the UI.
4614- Setting: `ui_font_size`
4615- Default: `16`
4616
4617**Options**
4618
4619`integer` values from `6` to `100` pixels (inclusive)
4620
4621## UI Font Weight
4622
4623- Description: The default font weight for text in the UI.
4624- Setting: `ui_font_weight`
4625- Default: `400`
4626
4627**Options**
4628
4629`integer` values between `100` and `900`
4630
4631## An example configuration:
4632
4633```json
4634// ~/.config/zed/settings.json
4635{
4636  "theme": "cave-light",
4637  "tab_size": 2,
4638  "preferred_line_length": 80,
4639  "soft_wrap": "none",
4640
4641  "buffer_font_size": 18,
4642  "buffer_font_family": ".ZedMono",
4643
4644  "autosave": "on_focus_change",
4645  "format_on_save": "off",
4646  "vim_mode": false,
4647  "projects_online_by_default": true,
4648  "terminal": {
4649    "font_family": "FiraCode Nerd Font Mono",
4650    "blinking": "off"
4651  },
4652  "languages": {
4653    "C": {
4654      "format_on_save": "language_server",
4655      "preferred_line_length": 64,
4656      "soft_wrap": "preferred_line_length"
4657    }
4658  }
4659}
4660```