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