configuring-zed.md

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