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### Modal Max Width
2042
2043- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
2044- Setting: `modal_max_width`
2045- Default: `small`
2046
2047## Preferred Line Length
2048
2049- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
2050- Setting: `preferred_line_length`
2051- Default: `80`
2052
2053**Options**
2054
2055`integer` values
2056
2057## Projects Online By Default
2058
2059- Description: Whether or not to show the online projects view by default.
2060- Setting: `projects_online_by_default`
2061- Default: `true`
2062
2063**Options**
2064
2065`boolean` values
2066
2067## Remove Trailing Whitespace On Save
2068
2069- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
2070- Setting: `remove_trailing_whitespace_on_save`
2071- Default: `true`
2072
2073**Options**
2074
2075`boolean` values
2076
2077## Search
2078
2079- Description: Search options to enable by default when opening new project and buffer searches.
2080- Setting: `search`
2081- Default:
2082
2083```json
2084"search": {
2085  "whole_word": false,
2086  "case_sensitive": false,
2087  "include_ignored": false,
2088  "regex": false
2089},
2090```
2091
2092## Seed Search Query From Cursor
2093
2094- Description: When to populate a new search's query based on the text under the cursor.
2095- Setting: `seed_search_query_from_cursor`
2096- Default: `always`
2097
2098**Options**
2099
21001. `always` always populate the search query with the word under the cursor
21012. `selection` only populate the search query when there is text selected
21023. `never` never populate the search query
2103
2104## Use Smartcase Search
2105
2106- 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. \
2107  This applies to both in-file searches and project-wide searches.
2108- Setting: `use_smartcase_search`
2109- Default: `false`
2110
2111**Options**
2112
2113`boolean` values
2114
2115Examples:
2116
2117- Searching for "function" would match "function", "Function", "FUNCTION", etc.
2118- Searching for "Function" would only match "Function", not "function" or "FUNCTION"
2119
2120## Show Call Status Icon
2121
2122- Description: Whether or not to show the call status icon in the status bar.
2123- Setting: `show_call_status_icon`
2124- Default: `true`
2125
2126**Options**
2127
2128`boolean` values
2129
2130## Completions
2131
2132- Description: Controls how completions are processed for this language.
2133- Setting: `completions`
2134- Default:
2135
2136```json
2137{
2138  "completions": {
2139    "words": "fallback",
2140    "lsp": true,
2141    "lsp_fetch_timeout_ms": 0,
2142    "lsp_insert_mode": "replace_suffix"
2143  }
2144}
2145```
2146
2147### Words
2148
2149- Description: Controls how words are completed. For large documents, not all words may be fetched for completion.
2150- Setting: `words`
2151- Default: `fallback`
2152
2153**Options**
2154
21551. `enabled` - Always fetch document's words for completions along with LSP completions
21562. `fallback` - Only if LSP response errors or times out, use document's words to show completions
21573. `disabled` - Never fetch or complete document's words for completions (word-based completions can still be queried via a separate action)
2158
2159### LSP
2160
2161- Description: Whether to fetch LSP completions or not.
2162- Setting: `lsp`
2163- Default: `true`
2164
2165**Options**
2166
2167`boolean` values
2168
2169### LSP Fetch Timeout (ms)
2170
2171- Description: When fetching LSP completions, determines how long to wait for a response of a particular server. When set to 0, waits indefinitely.
2172- Setting: `lsp_fetch_timeout_ms`
2173- Default: `0`
2174
2175**Options**
2176
2177`integer` values representing milliseconds
2178
2179### LSP Insert Mode
2180
2181- Description: Controls what range to replace when accepting LSP completions.
2182- Setting: `lsp_insert_mode`
2183- Default: `replace_suffix`
2184
2185**Options**
2186
21871. `insert` - Replaces text before the cursor, using the `insert` range described in the LSP specification
21882. `replace` - Replaces text before and after the cursor, using the `replace` range described in the LSP specification
21893. `replace_subsequence` - Behaves like `"replace"` if the text that would be replaced is a subsequence of the completion text, and like `"insert"` otherwise
21904. `replace_suffix` - Behaves like `"replace"` if the text after the cursor is a suffix of the completion, and like `"insert"` otherwise
2191
2192## Show Completions On Input
2193
2194- Description: Whether or not to show completions as you type.
2195- Setting: `show_completions_on_input`
2196- Default: `true`
2197
2198**Options**
2199
2200`boolean` values
2201
2202## Show Completion Documentation
2203
2204- Description: Whether to display inline and alongside documentation for items in the completions menu.
2205- Setting: `show_completion_documentation`
2206- Default: `true`
2207
2208**Options**
2209
2210`boolean` values
2211
2212## Show Edit Predictions
2213
2214- Description: Whether to show edit predictions as you type or manually by triggering `editor::ShowEditPrediction`.
2215- Setting: `show_edit_predictions`
2216- Default: `true`
2217
2218**Options**
2219
2220`boolean` values
2221
2222## Show Whitespaces
2223
2224- Description: Whether or not to render whitespace characters in the editor.
2225- Setting: `show_whitespaces`
2226- Default: `selection`
2227
2228**Options**
2229
22301. `all`
22312. `selection`
22323. `none`
22334. `boundary`
2234
2235## Soft Wrap
2236
2237- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
2238- Setting: `soft_wrap`
2239- Default: `none`
2240
2241**Options**
2242
22431. `none` to avoid wrapping generally, unless the line is too long
22442. `prefer_line` (deprecated, same as `none`)
22453. `editor_width` to wrap lines that overflow the editor width
22464. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
22475. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
2248
2249## Wrap Guides (Vertical Rulers)
2250
2251- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
2252- Setting: `wrap_guides`
2253- Default: []
2254
2255**Options**
2256
2257List of `integer` column numbers
2258
2259## Tab Size
2260
2261- Description: The number of spaces to use for each tab character.
2262- Setting: `tab_size`
2263- Default: `4`
2264
2265**Options**
2266
2267`integer` values
2268
2269## Telemetry
2270
2271- Description: Control what info is collected by Zed.
2272- Setting: `telemetry`
2273- Default:
2274
2275```json
2276"telemetry": {
2277  "diagnostics": true,
2278  "metrics": true
2279},
2280```
2281
2282**Options**
2283
2284### Diagnostics
2285
2286- Description: Setting for sending debug-related data, such as crash reports.
2287- Setting: `diagnostics`
2288- Default: `true`
2289
2290**Options**
2291
2292`boolean` values
2293
2294### Metrics
2295
2296- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
2297- Setting: `metrics`
2298- Default: `true`
2299
2300**Options**
2301
2302`boolean` values
2303
2304## Terminal
2305
2306- Description: Configuration for the terminal.
2307- Setting: `terminal`
2308- Default:
2309
2310```json
2311{
2312  "terminal": {
2313    "alternate_scroll": "off",
2314    "blinking": "terminal_controlled",
2315    "copy_on_select": false,
2316    "dock": "bottom",
2317    "default_width": 640,
2318    "default_height": 320,
2319    "detect_venv": {
2320      "on": {
2321        "directories": [".env", "env", ".venv", "venv"],
2322        "activate_script": "default"
2323      }
2324    },
2325    "env": {},
2326    "font_family": null,
2327    "font_features": null,
2328    "font_size": null,
2329    "line_height": "comfortable",
2330    "option_as_meta": false,
2331    "button": true,
2332    "shell": "system",
2333    "toolbar": {
2334      "breadcrumbs": true
2335    },
2336    "working_directory": "current_project_directory",
2337    "scrollbar": {
2338      "show": null
2339    }
2340  }
2341}
2342```
2343
2344### Terminal: Dock
2345
2346- Description: Control the position of the dock
2347- Setting: `dock`
2348- Default: `bottom`
2349
2350**Options**
2351
2352`"bottom"`, `"left"` or `"right"`
2353
2354### Terminal: Alternate Scroll
2355
2356- 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.
2357- Setting: `alternate_scroll`
2358- Default: `off`
2359
2360**Options**
2361
23621. Default alternate scroll mode to off
2363
2364```json
2365{
2366  "terminal": {
2367    "alternate_scroll": "off"
2368  }
2369}
2370```
2371
23722. Default alternate scroll mode to on
2373
2374```json
2375{
2376  "terminal": {
2377    "alternate_scroll": "on"
2378  }
2379}
2380```
2381
2382### Terminal: Blinking
2383
2384- Description: Set the cursor blinking behavior in the terminal
2385- Setting: `blinking`
2386- Default: `terminal_controlled`
2387
2388**Options**
2389
23901. Never blink the cursor, ignore the terminal mode
2391
2392```json
2393{
2394  "terminal": {
2395    "blinking": "off"
2396  }
2397}
2398```
2399
24002. Default the cursor blink to off, but allow the terminal to turn blinking on
2401
2402```json
2403{
2404  "terminal": {
2405    "blinking": "terminal_controlled"
2406  }
2407}
2408```
2409
24103. Always blink the cursor, ignore the terminal mode
2411
2412```json
2413{
2414  "terminal": {
2415    "blinking": "on"
2416  }
2417}
2418```
2419
2420### Terminal: Copy On Select
2421
2422- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
2423- Setting: `copy_on_select`
2424- Default: `false`
2425
2426**Options**
2427
2428`boolean` values
2429
2430**Example**
2431
2432```json
2433{
2434  "terminal": {
2435    "copy_on_select": true
2436  }
2437}
2438```
2439
2440### Terminal: Env
2441
2442- 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
2443- Setting: `env`
2444- Default: `{}`
2445
2446**Example**
2447
2448```json
2449{
2450  "terminal": {
2451    "env": {
2452      "ZED": "1",
2453      "KEY": "value1:value2"
2454    }
2455  }
2456}
2457```
2458
2459### Terminal: Font Size
2460
2461- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
2462- Setting: `font_size`
2463- Default: `null`
2464
2465**Options**
2466
2467`integer` values
2468
2469```json
2470{
2471  "terminal": {
2472    "font_size": 15
2473  }
2474}
2475```
2476
2477### Terminal: Font Family
2478
2479- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
2480- Setting: `font_family`
2481- Default: `null`
2482
2483**Options**
2484
2485The name of any font family installed on the user's system
2486
2487```json
2488{
2489  "terminal": {
2490    "font_family": "Berkeley Mono"
2491  }
2492}
2493```
2494
2495### Terminal: Font Features
2496
2497- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
2498- Setting: `font_features`
2499- Default: `null`
2500- Platform: macOS and Windows.
2501
2502**Options**
2503
2504See Buffer Font Features
2505
2506```json
2507{
2508  "terminal": {
2509    "font_features": {
2510      "calt": false
2511      // See Buffer Font Features for more features
2512    }
2513  }
2514}
2515```
2516
2517### Terminal: Line Height
2518
2519- Description: Set the terminal's line height.
2520- Setting: `line_height`
2521- Default: `comfortable`
2522
2523**Options**
2524
25251. Use a line height that's `comfortable` for reading, 1.618. (default)
2526
2527```json
2528{
2529  "terminal": {
2530    "line_height": "comfortable"
2531  }
2532}
2533```
2534
25352. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
2536
2537```json
2538{
2539  "terminal": {
2540    "line_height": "standard"
2541  }
2542}
2543```
2544
25453.  Use a custom line height.
2546
2547```json
2548{
2549  "terminal": {
2550    "line_height": {
2551      "custom": 2
2552    }
2553  }
2554}
2555```
2556
2557### Terminal: Option As Meta
2558
2559- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
2560- Setting: `option_as_meta`
2561- Default: `false`
2562
2563**Options**
2564
2565`boolean` values
2566
2567```json
2568{
2569  "terminal": {
2570    "option_as_meta": true
2571  }
2572}
2573```
2574
2575### Terminal: Shell
2576
2577- Description: What shell to use when launching the terminal.
2578- Setting: `shell`
2579- Default: `system`
2580
2581**Options**
2582
25831. Use the system's default terminal configuration (usually the `/etc/passwd` file).
2584
2585```json
2586{
2587  "terminal": {
2588    "shell": "system"
2589  }
2590}
2591```
2592
25932. A program to launch:
2594
2595```json
2596{
2597  "terminal": {
2598    "shell": {
2599      "program": "sh"
2600    }
2601  }
2602}
2603```
2604
26053. A program with arguments:
2606
2607```json
2608{
2609  "terminal": {
2610    "shell": {
2611      "with_arguments": {
2612        "program": "/bin/bash",
2613        "args": ["--login"]
2614      }
2615    }
2616  }
2617}
2618```
2619
2620## Terminal: Detect Virtual Environments {#terminal-detect_venv}
2621
2622- 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.
2623- Setting: `detect_venv`
2624- Default:
2625
2626```json
2627{
2628  "terminal": {
2629    "detect_venv": {
2630      "on": {
2631        // Default directories to search for virtual environments, relative
2632        // to the current working directory. We recommend overriding this
2633        // in your project's settings, rather than globally.
2634        "directories": [".env", "env", ".venv", "venv"],
2635        // Can also be `csh`, `fish`, and `nushell`
2636        "activate_script": "default"
2637      }
2638    }
2639  }
2640}
2641```
2642
2643Disable with:
2644
2645```json
2646{
2647  "terminal": {
2648    "detect_venv": "off"
2649  }
2650}
2651```
2652
2653## Terminal: Toolbar
2654
2655- Description: Whether or not to show various elements in the terminal toolbar.
2656- Setting: `toolbar`
2657- Default:
2658
2659```json
2660{
2661  "terminal": {
2662    "toolbar": {
2663      "breadcrumbs": true
2664    }
2665  }
2666}
2667```
2668
2669**Options**
2670
2671At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
2672
2673If the terminal title is empty, the breadcrumbs won't be shown.
2674
2675The shell running in the terminal needs to be configured to emit the title.
2676
2677Example command to set the title: `echo -e "\e]2;New Title\007";`
2678
2679### Terminal: Button
2680
2681- Description: Control to show or hide the terminal button in the status bar
2682- Setting: `button`
2683- Default: `true`
2684
2685**Options**
2686
2687`boolean` values
2688
2689```json
2690{
2691  "terminal": {
2692    "button": false
2693  }
2694}
2695```
2696
2697### Terminal: Working Directory
2698
2699- Description: What working directory to use when launching the terminal.
2700- Setting: `working_directory`
2701- Default: `"current_project_directory"`
2702
2703**Options**
2704
27051. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
2706
2707```json
2708{
2709  "terminal": {
2710    "working_directory": "current_project_directory"
2711  }
2712}
2713```
2714
27152. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
2716
2717```json
2718{
2719  "terminal": {
2720    "working_directory": "first_project_directory"
2721  }
2722}
2723```
2724
27253. Always use this platform's home directory (if we can find it)
2726
2727```json
2728{
2729  "terminal": {
2730    "working_directory": "always_home"
2731  }
2732}
2733```
2734
27354. 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.
2736
2737```json
2738{
2739  "terminal": {
2740    "working_directory": {
2741      "always": {
2742        "directory": "~/zed/projects/"
2743      }
2744    }
2745  }
2746}
2747```
2748
2749## Theme
2750
2751- 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.
2752- Setting: `theme`
2753- Default: `One Dark`
2754
2755### Theme Object
2756
2757- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2758- Setting: `theme`
2759- Default:
2760
2761```json
2762"theme": {
2763  "mode": "system",
2764  "dark": "One Dark",
2765  "light": "One Light"
2766},
2767```
2768
2769### Mode
2770
2771- Description: Specify theme mode.
2772- Setting: `mode`
2773- Default: `system`
2774
2775**Options**
2776
27771. Set the theme to dark mode
2778
2779```json
2780{
2781  "mode": "dark"
2782}
2783```
2784
27852. Set the theme to light mode
2786
2787```json
2788{
2789  "mode": "light"
2790}
2791```
2792
27933. Set the theme to system mode
2794
2795```json
2796{
2797  "mode": "system"
2798}
2799```
2800
2801### Dark
2802
2803- Description: The name of the dark Zed theme to use for the UI.
2804- Setting: `dark`
2805- Default: `One Dark`
2806
2807**Options**
2808
2809Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2810
2811### Light
2812
2813- Description: The name of the light Zed theme to use for the UI.
2814- Setting: `light`
2815- Default: `One Light`
2816
2817**Options**
2818
2819Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2820
2821## Vim
2822
2823- Description: Whether or not to enable vim mode (work in progress).
2824- Setting: `vim_mode`
2825- Default: `false`
2826
2827## Project Panel
2828
2829- Description: Customize project panel
2830- Setting: `project_panel`
2831- Default:
2832
2833```json
2834{
2835  "project_panel": {
2836    "button": true,
2837    "default_width": 240,
2838    "dock": "left",
2839    "entry_spacing": "comfortable",
2840    "file_icons": true,
2841    "folder_icons": true,
2842    "git_status": true,
2843    "indent_size": 20,
2844    "auto_reveal_entries": true,
2845    "auto_fold_dirs": true,
2846    "scrollbar": {
2847      "show": null
2848    },
2849    "show_diagnostics": "all",
2850    "indent_guides": {
2851      "show": "always"
2852    }
2853  }
2854}
2855```
2856
2857### Dock
2858
2859- Description: Control the position of the dock
2860- Setting: `dock`
2861- Default: `left`
2862
2863**Options**
2864
28651. Default dock position to left
2866
2867```json
2868{
2869  "dock": "left"
2870}
2871```
2872
28732. Default dock position to right
2874
2875```json
2876{
2877  "dock": "right"
2878}
2879```
2880
2881### Entry Spacing
2882
2883- Description: Spacing between worktree entries
2884- Setting: `entry_spacing`
2885- Default: `comfortable`
2886
2887**Options**
2888
28891. Comfortable entry spacing
2890
2891```json
2892{
2893  "entry_spacing": "comfortable"
2894}
2895```
2896
28972. Standard entry spacing
2898
2899```json
2900{
2901  "entry_spacing": "standard"
2902}
2903```
2904
2905### Git Status
2906
2907- Description: Indicates newly created and updated files
2908- Setting: `git_status`
2909- Default: `true`
2910
2911**Options**
2912
29131. Default enable git status
2914
2915```json
2916{
2917  "git_status": true
2918}
2919```
2920
29212. Default disable git status
2922
2923```json
2924{
2925  "git_status": false
2926}
2927```
2928
2929### Default Width
2930
2931- Description: Customize default width taken by project panel
2932- Setting: `default_width`
2933- Default: `240`
2934
2935**Options**
2936
2937`float` values
2938
2939### Auto Reveal Entries
2940
2941- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
2942- Setting: `auto_reveal_entries`
2943- Default: `true`
2944
2945**Options**
2946
29471. Enable auto reveal entries
2948
2949```json
2950{
2951  "auto_reveal_entries": true
2952}
2953```
2954
29552. Disable auto reveal entries
2956
2957```json
2958{
2959  "auto_reveal_entries": false
2960}
2961```
2962
2963### Auto Fold Dirs
2964
2965- Description: Whether to fold directories automatically when directory has only one directory inside.
2966- Setting: `auto_fold_dirs`
2967- Default: `true`
2968
2969**Options**
2970
29711. Enable auto fold dirs
2972
2973```json
2974{
2975  "auto_fold_dirs": true
2976}
2977```
2978
29792. Disable auto fold dirs
2980
2981```json
2982{
2983  "auto_fold_dirs": false
2984}
2985```
2986
2987### Indent Size
2988
2989- Description: Amount of indentation (in pixels) for nested items.
2990- Setting: `indent_size`
2991- Default: `20`
2992
2993### Indent Guides: Show
2994
2995- Description: Whether to show indent guides in the project panel.
2996- Setting: `indent_guides`
2997- Default:
2998
2999```json
3000"indent_guides": {
3001  "show": "always"
3002}
3003```
3004
3005**Options**
3006
30071. Show indent guides in the project panel
3008
3009```json
3010{
3011  "indent_guides": {
3012    "show": "always"
3013  }
3014}
3015```
3016
30172. Hide indent guides in the project panel
3018
3019```json
3020{
3021  "indent_guides": {
3022    "show": "never"
3023  }
3024}
3025```
3026
3027### Scrollbar: Show
3028
3029- 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.
3030- Setting: `scrollbar`
3031- Default:
3032
3033```json
3034"scrollbar": {
3035  "show": null
3036}
3037```
3038
3039**Options**
3040
30411. Show scrollbar in the project panel
3042
3043```json
3044{
3045  "scrollbar": {
3046    "show": "always"
3047  }
3048}
3049```
3050
30512. Hide scrollbar in the project panel
3052
3053```json
3054{
3055  "scrollbar": {
3056    "show": "never"
3057  }
3058}
3059```
3060
3061## Assistant Panel
3062
3063- Description: Customize assistant panel
3064- Setting: `assistant`
3065- Default:
3066
3067```json
3068"assistant": {
3069  "version": "2",
3070  "enabled": true,
3071  "button": true,
3072  "dock": "right",
3073  "default_width": 640,
3074  "default_height": 320,
3075  "default_model": {
3076    "provider": "zed.dev",
3077    "model": "claude-3-7-sonnet-latest"
3078  },
3079  "editor_model": {
3080    "provider": "zed.dev",
3081    "model": "claude-3-7-sonnet-latest"
3082  },
3083  "single_file_review": true,
3084}
3085```
3086
3087## Outline Panel
3088
3089- Description: Customize outline Panel
3090- Setting: `outline_panel`
3091- Default:
3092
3093```json
3094"outline_panel": {
3095  "button": true,
3096  "default_width": 300,
3097  "dock": "left",
3098  "file_icons": true,
3099  "folder_icons": true,
3100  "git_status": true,
3101  "indent_size": 20,
3102  "auto_reveal_entries": true,
3103  "auto_fold_dirs": true,
3104  "indent_guides": {
3105    "show": "always"
3106  },
3107  "scrollbar": {
3108    "show": null
3109  }
3110}
3111```
3112
3113## Calls
3114
3115- Description: Customize behavior when participating in a call
3116- Setting: `calls`
3117- Default:
3118
3119```json
3120"calls": {
3121  // Join calls with the microphone live by default
3122  "mute_on_join": false,
3123  // Share your project when you are the first to join a channel
3124  "share_on_join": false
3125},
3126```
3127
3128## Unnecessary Code Fade
3129
3130- Description: How much to fade out unused code.
3131- Setting: `unnecessary_code_fade`
3132- Default: `0.3`
3133
3134**Options**
3135
3136Float values between `0.0` and `0.9`, where:
3137
3138- `0.0` means no fading (unused code looks the same as used code)
3139- `0.9` means maximum fading (unused code is very faint but still visible)
3140
3141**Example**
3142
3143```json
3144{
3145  "unnecessary_code_fade": 0.5
3146}
3147```
3148
3149## UI Font Family
3150
3151- Description: The name of the font to use for text in the UI.
3152- Setting: `ui_font_family`
3153- Default: `Zed Plex Sans`
3154
3155**Options**
3156
3157The name of any font family installed on the system.
3158
3159## UI Font Features
3160
3161- Description: The OpenType features to enable for text in the UI.
3162- Setting: `ui_font_features`
3163- Default:
3164
3165```json
3166"ui_font_features": {
3167  "calt": false
3168}
3169```
3170
3171- Platform: macOS and Windows.
3172
3173**Options**
3174
3175Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
3176
3177For example, to disable font ligatures, add the following to your settings:
3178
3179```json
3180{
3181  "ui_font_features": {
3182    "calt": false
3183  }
3184}
3185```
3186
3187You can also set other OpenType features, like setting `cv01` to `7`:
3188
3189```json
3190{
3191  "ui_font_features": {
3192    "cv01": 7
3193  }
3194}
3195```
3196
3197## UI Font Fallbacks
3198
3199- Description: The font fallbacks to use for text in the UI.
3200- Setting: `ui_font_fallbacks`
3201- Default: `null`
3202- Platform: macOS and Windows.
3203
3204**Options**
3205
3206For example, to use `Nerd Font` as a fallback, add the following to your settings:
3207
3208```json
3209{
3210  "ui_font_fallbacks": ["Nerd Font"]
3211}
3212```
3213
3214## UI Font Size
3215
3216- Description: The default font size for text in the UI.
3217- Setting: `ui_font_size`
3218- Default: `16`
3219
3220**Options**
3221
3222`integer` values from `6` to `100` pixels (inclusive)
3223
3224## UI Font Weight
3225
3226- Description: The default font weight for text in the UI.
3227- Setting: `ui_font_weight`
3228- Default: `400`
3229
3230**Options**
3231
3232`integer` values between `100` and `900`
3233
3234## An example configuration:
3235
3236```json
3237// ~/.config/zed/settings.json
3238{
3239  "theme": "cave-light",
3240  "tab_size": 2,
3241  "preferred_line_length": 80,
3242  "soft_wrap": "none",
3243
3244  "buffer_font_size": 18,
3245  "buffer_font_family": "Zed Plex Mono",
3246
3247  "autosave": "on_focus_change",
3248  "format_on_save": "off",
3249  "vim_mode": false,
3250  "projects_online_by_default": true,
3251  "terminal": {
3252    "font_family": "FiraCode Nerd Font Mono",
3253    "blinking": "off"
3254  },
3255  "languages": {
3256    "C": {
3257      "format_on_save": "language_server",
3258      "preferred_line_length": 64,
3259      "soft_wrap": "preferred_line_length"
3260    }
3261  }
3262}
3263```