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