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
34Styling settings applied to the active pane.
35
36### Magnification
37
38- 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.
39- Setting: `magnification`
40- Default: `1.0`
41
42### Border size
43
44- 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.
45- Setting: `border_size`
46- Default: `0.0`
47
48### Inactive Opacity
49
50- 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.
51- Setting: `inactive_opacity`
52- Default: `1.0`
53
54**Options**
55
56`float` values
57
58## Auto Install extensions
59
60- Description: Define extensions to be autoinstalled or never be installed.
61- Setting: `auto_install_extension`
62- Default: `{"html": true}`
63
64**Options**
65
66You can find the names of your currently installed extensions by listing the subfolders under the [extension installation location](./extensions/installing-extensions#installation-location):
67
68On MacOS:
69
70```sh
71ls ~/Library/Application\ Support/Zed/extensions/installed/
72```
73
74On Linux:
75
76```sh
77ls ~/.local/share/zed/extensions/installed
78```
79
80Define extensions which should be installed (`true`) or never installed (`false`).
81
82```json
83{
84 "auto_install_extensions": {
85 "html": true,
86 "dockerfile": true,
87 "docker-compose": false
88 }
89}
90```
91
92## Autosave
93
94- Description: When to automatically save edited buffers.
95- Setting: `autosave`
96- Default: `off`
97
98**Options**
99
1001. To disable autosave, set it to `off`:
101
102```json
103{
104 "autosave": "off"
105}
106```
107
1082. To autosave when focus changes, use `on_focus_change`:
109
110```json
111{
112 "autosave": "on_focus_change"
113}
114```
115
1163. To autosave when the active window changes, use `on_window_change`:
117
118```json
119{
120 "autosave": "on_window_change"
121}
122```
123
1244. To autosave after an inactivity period, use `after_delay`:
125
126```json
127{
128 "autosave": {
129 "after_delay": {
130 "milliseconds": 1000
131 }
132 }
133}
134```
135
136## Restore on Startup
137
138- Description: Controls session restoration on startup.
139- Setting: `restore_on_startup`
140- Default: `last_session`
141
142**Options**
143
1441. Restore all workspaces that were open when quitting Zed:
145
146```json
147{
148 "restore_on_startup": "last_session"
149}
150```
151
1522. Restore the workspace that was closed last:
153
154```json
155{
156 "restore_on_startup": "last_workspace"
157}
158```
159
1603. Always start with an empty editor:
161
162```json
163{
164 "restore_on_startup": "none"
165}
166```
167
168## Autoscroll on Clicks
169
170- Description: Whether to scroll when clicking near the edge of the visible text area.
171- Setting: `autoscroll_on_clicks`
172- Default: `false`
173
174**Options**
175
176`boolean` values
177
178## Auto Update
179
180- Description: Whether or not to automatically check for updates.
181- Setting: `auto_update`
182- Default: `true`
183
184**Options**
185
186`boolean` values
187
188## Base Keymap
189
190- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
191- Setting: `base_keymap`
192- Default: `VSCode`
193
194**Options**
195
1961. VSCode
197
198```json
199{
200 "base_keymap": "VSCode"
201}
202```
203
2042. Atom
205
206```json
207{
208 "base_keymap": "Atom"
209}
210```
211
2123. JetBrains
213
214```json
215{
216 "base_keymap": "JetBrains"
217}
218```
219
2204. None
221
222```json
223{
224 "base_keymap": "None"
225}
226```
227
2285. SublimeText
229
230```json
231{
232 "base_keymap": "SublimeText"
233}
234```
235
2366. TextMate
237
238```json
239{
240 "base_keymap": "TextMate"
241}
242```
243
244## Buffer Font Family
245
246- Description: The name of a font to use for rendering text in the editor.
247- Setting: `buffer_font_family`
248- Default: `Zed Plex Mono`
249
250**Options**
251
252The name of any font family installed on the user's system
253
254## Buffer Font Features
255
256- Description: The OpenType features to enable for text in the editor.
257- Setting: `buffer_font_features`
258- Default: `null`
259- Platform: macOS and Windows.
260
261**Options**
262
263Zed 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.
264
265For example, to disable font ligatures, add the following to your settings:
266
267```json
268{
269 "buffer_font_features": {
270 "calt": false
271 }
272}
273```
274
275You can also set other OpenType features, like setting `cv01` to `7`:
276
277```json
278{
279 "buffer_font_features": {
280 "cv01": 7
281 }
282}
283```
284
285## Buffer Font Fallbacks
286
287- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
288- Setting: `buffer_font_fallbacks`
289- Default: `null`
290- Platform: macOS and Windows.
291
292**Options**
293
294For example, to use `Nerd Font` as a fallback, add the following to your settings:
295
296```json
297{
298 "buffer_font_fallbacks": ["Nerd Font"]
299}
300```
301
302## Buffer Font Size
303
304- Description: The default font size for text in the editor.
305- Setting: `buffer_font_size`
306- Default: `15`
307
308**Options**
309
310`integer` values from `6` to `100` pixels (inclusive)
311
312## Buffer Font Weight
313
314- Description: The default font weight for text in the editor.
315- Setting: `buffer_font_weight`
316- Default: `400`
317
318**Options**
319
320`integer` values between `100` and `900`
321
322## Buffer Line Height
323
324- Description: The default line height for text in the editor.
325- Setting: `buffer_line_height`
326- Default: `"comfortable"`
327
328**Options**
329
330`"standard"`, `"comfortable"` or `{"custom": float}` (`1` is very compact, `2` very loose)
331
332## Confirm Quit
333
334- Description: Whether or not to prompt the user to confirm before closing the application.
335- Setting: `confirm_quit`
336- Default: `false`
337
338**Options**
339
340`boolean` values
341
342## Centered Layout
343
344- Description: Configuration for the centered layout mode.
345- Setting: `centered_layout`
346- Default:
347
348```json
349"centered_layout": {
350 "left_padding": 0.2,
351 "right_padding": 0.2,
352}
353```
354
355**Options**
356
357The `left_padding` and `right_padding` options define the relative width of the
358left 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`.
359
360## Direnv Integration
361
362- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
363 `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.
364 It also allows for those environment variables to be used in tasks.
365- Setting: `load_direnv`
366- Default:
367
368```json
369"load_direnv": "direct"
370```
371
372**Options**
373There are two options to choose from:
374
3751. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
3762. `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.
377
378## Inline Completions
379
380- Description: Settings for inline completions.
381- Setting: `inline_completions`
382- Default:
383
384```json
385"inline_completions": {
386 "disabled_globs": [
387 ".env"
388 ]
389}
390```
391
392**Options**
393
394### Disabled Globs
395
396- Description: A list of globs representing files that inline completions should be disabled for.
397- Setting: `disabled_globs`
398- Default: `[".env"]`
399
400**Options**
401
402List of `string` values
403
404## Inline Completions Disabled in
405
406- Description: A list of language scopes in which inline completions should be disabled.
407- Setting: `inline_completions_disabled_in`
408- Default: `[]`
409
410**Options**
411
412List of `string` values
413
4141. Don't show inline completions in comments:
415
416```json
417"disabled_in": ["comment"]
418```
419
4202. Don't show inline completions in strings and comments:
421
422```json
423"disabled_in": ["comment", "string"]
424```
425
4263. Only in Go, don't show inline completions in strings and comments:
427
428```json
429{
430 "languages": {
431 "Go": {
432 "inline_completions_disabled_in": ["comment", "string"]
433 }
434 }
435}
436```
437
438## Current Line Highlight
439
440- Description: How to highlight the current line in the editor.
441- Setting: `current_line_highlight`
442- Default: `all`
443
444**Options**
445
4461. Don't highlight the current line:
447
448```json
449"current_line_highlight": "none"
450```
451
4522. Highlight the gutter area:
453
454```json
455"current_line_highlight": "gutter"
456```
457
4583. Highlight the editor area:
459
460```json
461"current_line_highlight": "line"
462```
463
4644. Highlight the full line:
465
466```json
467"current_line_highlight": "all"
468```
469
470## LSP Highlight Debounce
471
472- Description: The debounce delay before querying highlights from the language server based on the current cursor location.
473- Setting: `lsp_highlight_debounce`
474- Default: `75`
475
476## Cursor Blink
477
478- Description: Whether or not the cursor blinks.
479- Setting: `cursor_blink`
480- Default: `true`
481
482**Options**
483
484`boolean` values
485
486## Cursor Shape
487
488- Description: Cursor shape for the default editor.
489- Setting: `cursor_shape`
490- Default: `bar`
491
492**Options**
493
4941. A vertical bar:
495
496```json
497"cursor_shape": "bar"
498```
499
5002. A block that surrounds the following character:
501
502```json
503"cursor_shape": "block"
504```
505
5063. An underline / underscore that runs along the following character:
507
508```json
509"cursor_shape": "underline"
510```
511
5124. An box drawn around the following character:
513
514```json
515"cursor_shape": "hollow"
516```
517
518**Options**
519
5201. Position the dock attached to the bottom of the workspace: `bottom`
5212. Position the dock to the right of the workspace like a side panel: `right`
5223. Position the dock full screen over the entire workspace: `expanded`
523
524## Editor Scrollbar
525
526- Description: Whether or not to show the editor scrollbar and various elements in it.
527- Setting: `scrollbar`
528- Default:
529
530```json
531"scrollbar": {
532 "show": "auto",
533 "cursors": true,
534 "git_diff": true,
535 "search_results": true,
536 "selected_symbol": true,
537 "diagnostics": "all",
538 "axes": {
539 "horizontal": true,
540 "vertical": true,
541 },
542},
543```
544
545### Show Mode
546
547- Description: When to show the editor scrollbar.
548- Setting: `show`
549- Default: `auto`
550
551**Options**
552
5531. Show the scrollbar if there's important information or follow the system's configured behavior:
554
555```json
556"scrollbar": {
557 "show": "auto"
558}
559```
560
5612. Match the system's configured behavior:
562
563```json
564"scrollbar": {
565 "show": "system"
566}
567```
568
5693. Always show the scrollbar:
570
571```json
572"scrollbar": {
573 "show": "always"
574}
575```
576
5774. Never show the scrollbar:
578
579```json
580"scrollbar": {
581 "show": "never"
582}
583```
584
585### Cursor Indicators
586
587- Description: Whether to show cursor positions in the scrollbar.
588- Setting: `cursors`
589- Default: `true`
590
591**Options**
592
593`boolean` values
594
595### Git Diff Indicators
596
597- Description: Whether to show git diff indicators in the scrollbar.
598- Setting: `git_diff`
599- Default: `true`
600
601**Options**
602
603`boolean` values
604
605### Search Results Indicators
606
607- Description: Whether to show buffer search results in the scrollbar.
608- Setting: `search_results`
609- Default: `true`
610
611**Options**
612
613`boolean` values
614
615### Selected Symbols Indicators
616
617- Description: Whether to show selected symbol occurrences in the scrollbar.
618- Setting: `selected_symbol`
619- Default: `true`
620
621**Options**
622
623`boolean` values
624
625### Diagnostics
626
627- Description: Which diagnostic indicators to show in the scrollbar.
628- Setting: `diagnostics`
629- Default: `all`
630
631**Options**
632
6331. Show all diagnostics:
634
635```json
636{
637 "diagnostics": "all"
638}
639```
640
6412. Do not show any diagnostics:
642
643```json
644{
645 "diagnostics": "none"
646}
647```
648
6493. Show only errors:
650
651```json
652{
653 "diagnostics": "error"
654}
655```
656
6574. Show only errors and warnings:
658
659```json
660{
661 "diagnostics": "warning"
662}
663```
664
6655. Show only errors, warnings, and information:
666
667```json
668{
669 "diagnostics": "information"
670}
671```
672
673### Axes
674
675- Description: Forcefully enable or disable the scrollbar for each axis
676- Setting: `axes`
677- Default:
678
679```json
680"scrollbar": {
681 "axes": {
682 "horizontal": true,
683 "vertical": true,
684 },
685}
686```
687
688#### Horizontal
689
690- Description: When false, forcefully disables the horizontal scrollbar. Otherwise, obey other settings.
691- Setting: `horizontal`
692- Default: `true`
693
694**Options**
695
696`boolean` values
697
698#### Vertical
699
700- Description: When false, forcefully disables the vertical scrollbar. Otherwise, obey other settings.
701- Setting: `vertical`
702- Default: `true`
703
704**Options**
705
706`boolean` values
707
708## Editor Tab Bar
709
710- Description: Settings related to the editor's tab bar.
711- Settings: `tab_bar`
712- Default:
713
714```json
715"tab_bar": {
716 "show": true,
717 "show_nav_history_buttons": true
718}
719```
720
721### Show
722
723- Description: Whether or not to show the tab bar in the editor.
724- Setting: `show`
725- Default: `true`
726
727**Options**
728
729`boolean` values
730
731### Navigation History Buttons
732
733- Description: Whether or not to show the navigation history buttons.
734- Setting: `show_nav_history_buttons`
735- Default: `true`
736
737**Options**
738
739`boolean` values
740
741## Editor Tabs
742
743- Description: Configuration for the editor tabs.
744- Setting: `tabs`
745- Default:
746
747```json
748"tabs": {
749 "close_position": "right",
750 "file_icons": false,
751 "git_status": false,
752 "activate_on_close": "history",
753 "always_show_close_button": false
754},
755```
756
757### Close Position
758
759- Description: Where to display close button within a tab.
760- Setting: `close_position`
761- Default: `right`
762
763**Options**
764
7651. Display the close button on the right:
766
767```json
768{
769 "close_position": "right"
770}
771```
772
7732. Display the close button on the left:
774
775```json
776{
777 "close_position": "left"
778}
779```
780
781### File Icons
782
783- Description: Whether to show the file icon for a tab.
784- Setting: `file_icons`
785- Default: `false`
786
787### Git Status
788
789- Description: Whether or not to show Git file status in tab.
790- Setting: `git_status`
791- Default: `false`
792
793### Activate on close
794
795- Description: What to do after closing the current tab.
796- Setting: `activate_on_close`
797- Default: `history`
798
799**Options**
800
8011. Activate the tab that was open previously:
802
803```json
804{
805 "activate_on_close": "history"
806}
807```
808
8092. Activate the right neighbour tab if present:
810
811```json
812{
813 "activate_on_close": "neighbour"
814}
815```
816
8173. Activate the left neighbour tab if present:
818
819```json
820{
821 "activate_on_close": "left_neighbour"
822}
823```
824
825### Always show the close button
826
827- Description: Whether to always show the close button on tabs.
828- Setting: `always_show_close_button`
829- Default: `false`
830
831## Editor Toolbar
832
833- Description: Whether or not to show various elements in the editor toolbar.
834- Setting: `toolbar`
835- Default:
836
837```json
838"toolbar": {
839 "breadcrumbs": true,
840 "quick_actions": true
841},
842```
843
844**Options**
845
846Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
847
848## Enable Language Server
849
850- Description: Whether or not to use language servers to provide code intelligence.
851- Setting: `enable_language_server`
852- Default: `true`
853
854**Options**
855
856`boolean` values
857
858## Ensure Final Newline On Save
859
860- Description: Whether or not to ensure there's a single newline at the end of a buffer when saving it.
861- Setting: `ensure_final_newline_on_save`
862- Default: `true`
863
864**Options**
865
866`boolean` values
867
868## LSP
869
870- Description: Configuration for language servers.
871- Setting: `lsp`
872- Default: `null`
873
874**Options**
875
876The following settings can be overridden for specific language servers:
877
878- `initialization_options`
879- `settings`
880
881To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
882
883Some 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.
884
885For example to pass the `check` option to `rust-analyzer`, use the following configuration:
886
887```json
888"lsp": {
889 "rust-analyzer": {
890 "initialization_options": {
891 "check": {
892 "command": "clippy" // rust-analyzer.check.command (default: "check")
893 }
894 }
895 }
896}
897```
898
899While other options may be changed at a runtime and should be placed under `settings`:
900
901```json
902"lsp": {
903 "yaml-language-server": {
904 "settings": {
905 "yaml": {
906 "keyOrdering": true // Enforces alphabetical ordering of keys in maps
907 }
908 }
909 }
910}
911```
912
913## Format On Save
914
915- Description: Whether or not to perform a buffer format before saving.
916- Setting: `format_on_save`
917- Default: `on`
918
919**Options**
920
9211. `on`, enables format on save obeying `formatter` setting:
922
923```json
924{
925 "format_on_save": "on"
926}
927```
928
9292. `off`, disables format on save:
930
931```json
932{
933 "format_on_save": "off"
934}
935```
936
937## Formatter
938
939- Description: How to perform a buffer format.
940- Setting: `formatter`
941- Default: `auto`
942
943**Options**
944
9451. To use the current language server, use `"language_server"`:
946
947```json
948{
949 "formatter": "language_server"
950}
951```
952
9532. 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):
954
955```json
956{
957 "formatter": {
958 "external": {
959 "command": "sed",
960 "arguments": ["-e", "s/ *$//"]
961 }
962 }
963}
964```
965
9663. 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.
967
968WARNING: `{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.
969
970```json
971 "formatter": {
972 "external": {
973 "command": "prettier",
974 "arguments": ["--stdin-filepath", "{buffer_path}"]
975 }
976 }
977```
978
9794. Or to use code actions provided by the connected language servers, use `"code_actions"`:
980
981```json
982{
983 "formatter": {
984 "code_actions": {
985 // Use ESLint's --fix:
986 "source.fixAll.eslint": true,
987 // Organize imports on save:
988 "source.organizeImports": true
989 }
990 }
991}
992```
993
9945. Or to use multiple formatters consecutively, use an array of formatters:
995
996```json
997{
998 "formatter": [
999 { "language_server": { "name": "rust-analyzer" } },
1000 {
1001 "external": {
1002 "command": "sed",
1003 "arguments": ["-e", "s/ *$//"]
1004 }
1005 }
1006 ]
1007}
1008```
1009
1010Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1011If any of the formatters fails, the subsequent ones will still be executed.
1012
1013## Code Actions On Format
1014
1015- Description: The code actions to perform with the primary language server when formatting the buffer.
1016- Setting: `code_actions_on_format`
1017- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
1018
1019**Examples**
1020
1021<!--
1022TBD: Add Python Ruff source.organizeImports example
1023-->
1024
10251. Organize imports on format in TypeScript and TSX buffers:
1026
1027```json
1028{
1029 "languages": {
1030 "TypeScript": {
1031 "code_actions_on_format": {
1032 "source.organizeImports": true
1033 }
1034 },
1035 "TSX": {
1036 "code_actions_on_format": {
1037 "source.organizeImports": true
1038 }
1039 }
1040 }
1041}
1042```
1043
10442. Run ESLint `fixAll` code action when formatting:
1045
1046```json
1047{
1048 "languages": {
1049 "JavaScript": {
1050 "code_actions_on_format": {
1051 "source.fixAll.eslint": true
1052 }
1053 }
1054 }
1055}
1056```
1057
10583. Run only a single ESLint rule when using `fixAll`:
1059
1060```json
1061{
1062 "languages": {
1063 "JavaScript": {
1064 "code_actions_on_format": {
1065 "source.fixAll.eslint": true
1066 }
1067 }
1068 },
1069 "lsp": {
1070 "eslint": {
1071 "settings": {
1072 "codeActionOnSave": {
1073 "rules": ["import/order"]
1074 }
1075 }
1076 }
1077 }
1078}
1079```
1080
1081## Auto close
1082
1083- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1084- Setting: `use_autoclose`
1085- Default: `true`
1086
1087**Options**
1088
1089`boolean` values
1090
1091## Always Treat Brackets As Autoclosed
1092
1093- Description: Controls how the editor handles the autoclosed characters.
1094- Setting: `always_treat_brackets_as_autoclosed`
1095- Default: `false`
1096
1097**Options**
1098
1099`boolean` values
1100
1101**Example**
1102
1103If the setting is set to `true`:
1104
11051. Enter in the editor: `)))`
11062. Move the cursor to the start: `^)))`
11073. Enter again: `)))`
1108
1109The result is still `)))` and not `))))))`, which is what it would be by default.
1110
1111## File Scan Exclusions
1112
1113- Setting: `file_scan_exclusions`
1114- Description: Configure how Add filename or directory globs that will be excluded by Zed entirely. They will be skipped during file scans, file searches and hidden from project file tree.
1115- Default:
1116
1117```json
1118"file_scan_exclusions": [
1119 "**/.git",
1120 "**/.svn",
1121 "**/.hg",
1122 "**/.jj",
1123 "**/CVS",
1124 "**/.DS_Store",
1125 "**/Thumbs.db",
1126 "**/.classpath",
1127 "**/.settings"
1128],
1129```
1130
1131Note, 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.
1132
1133## File Types
1134
1135- Setting: `file_types`
1136- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1137- Default: `{}`
1138
1139**Examples**
1140
1141To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1142
1143```json
1144{
1145 "file_types": {
1146 "C++": ["c"],
1147 "TOML": ["MyLockFile"],
1148 "Dockerfile": ["Dockerfile*"]
1149 }
1150}
1151```
1152
1153## Git
1154
1155- Description: Configuration for git-related features.
1156- Setting: `git`
1157- Default:
1158
1159```json
1160{
1161 "git": {
1162 "git_gutter": "tracked_files",
1163 "inline_blame": {
1164 "enabled": true
1165 }
1166 }
1167}
1168```
1169
1170### Git Gutter
1171
1172- Description: Whether or not to show the git gutter.
1173- Setting: `git_gutter`
1174- Default: `tracked_files`
1175
1176**Options**
1177
11781. Show git gutter in tracked files
1179
1180```json
1181{
1182 "git": {
1183 "git_gutter": "tracked_files"
1184 }
1185}
1186```
1187
11882. Hide git gutter
1189
1190```json
1191{
1192 "git": {
1193 "git_gutter": "hide"
1194 }
1195}
1196```
1197
1198### Inline Git Blame
1199
1200- Description: Whether or not to show git blame information inline, on the currently focused line.
1201- Setting: `inline_blame`
1202- Default:
1203
1204```json
1205{
1206 "git": {
1207 "inline_blame": {
1208 "enabled": true
1209 }
1210 }
1211}
1212```
1213
1214**Options**
1215
12161. Disable inline git blame:
1217
1218```json
1219{
1220 "git": {
1221 "inline_blame": {
1222 "enabled": false
1223 }
1224 }
1225}
1226```
1227
12282. Only show inline git blame after a delay (that starts after cursor stops moving):
1229
1230```json
1231{
1232 "git": {
1233 "inline_blame": {
1234 "enabled": true,
1235 "delay_ms": 500
1236 }
1237 }
1238}
1239```
1240
12413. Show a commit summary next to the commit date and author:
1242
1243```json
1244{
1245 "git": {
1246 "inline_blame": {
1247 "enabled": true,
1248 "show_commit_summary": true
1249 }
1250 }
1251}
1252```
1253
12544. Use this as the minimum column at which to display inline blame information:
1255
1256```json
1257{
1258 "git": {
1259 "inline_blame": {
1260 "enabled": true,
1261 "min_column": 80
1262 }
1263 }
1264}
1265```
1266
1267## Indent Guides
1268
1269- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
1270- Setting: `indent_guides`
1271- Default:
1272
1273```json
1274{
1275 "indent_guides": {
1276 "enabled": true,
1277 "line_width": 1,
1278 "active_line_width": 1,
1279 "coloring": "fixed",
1280 "background_coloring": "disabled"
1281 }
1282}
1283```
1284
1285**Options**
1286
12871. Disable indent guides
1288
1289```json
1290{
1291 "indent_guides": {
1292 "enabled": false
1293 }
1294}
1295```
1296
12972. Enable indent guides for a specific language.
1298
1299```json
1300{
1301 "languages": {
1302 "Python": {
1303 "indent_guides": {
1304 "enabled": true
1305 }
1306 }
1307 }
1308}
1309```
1310
13113. Enable indent aware coloring ("rainbow indentation").
1312 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.
1313
1314```json
1315{
1316 "indent_guides": {
1317 "enabled": true,
1318 "coloring": "indent_aware"
1319 }
1320}
1321```
1322
13234. Enable indent aware background coloring ("rainbow indentation").
1324 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.
1325
1326```json
1327{
1328 "indent_guides": {
1329 "enabled": true,
1330 "coloring": "indent_aware",
1331 "background_coloring": "indent_aware"
1332 }
1333}
1334```
1335
1336## Hard Tabs
1337
1338- Description: Whether to indent lines using tab characters or multiple spaces.
1339- Setting: `hard_tabs`
1340- Default: `false`
1341
1342**Options**
1343
1344`boolean` values
1345
1346## Hover Popover Enabled
1347
1348- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
1349- Setting: `hover_popover_enabled`
1350- Default: `true`
1351
1352**Options**
1353
1354`boolean` values
1355
1356## Inlay hints
1357
1358- Description: Configuration for displaying extra text with hints in the editor.
1359- Setting: `inlay_hints`
1360- Default:
1361
1362```json
1363"inlay_hints": {
1364 "enabled": false,
1365 "show_type_hints": true,
1366 "show_parameter_hints": true,
1367 "show_other_hints": true,
1368 "show_background": false,
1369 "edit_debounce_ms": 700,
1370 "scroll_debounce_ms": 50
1371}
1372```
1373
1374**Options**
1375
1376Inlay hints querying consists of two parts: editor (client) and LSP server.
1377With 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.
1378At 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.
1379
1380The following languages have inlay hints preconfigured by Zed:
1381
1382- [Go](https://docs.zed.dev/languages/go)
1383- [Rust](https://docs.zed.dev/languages/rust)
1384- [Svelte](https://docs.zed.dev/languages/svelte)
1385- [Typescript](https://docs.zed.dev/languages/typescript)
1386
1387Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
1388
1389Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
1390Settings-related hint updates are not debounced.
1391
1392## Journal
1393
1394- Description: Configuration for the journal.
1395- Setting: `journal`
1396- Default:
1397
1398```json
1399"journal": {
1400 "path": "~",
1401 "hour_format": "hour12"
1402}
1403```
1404
1405### Path
1406
1407- Description: The path of the directory where journal entries are stored.
1408- Setting: `path`
1409- Default: `~`
1410
1411**Options**
1412
1413`string` values
1414
1415### Hour Format
1416
1417- Description: The format to use for displaying hours in the journal.
1418- Setting: `hour_format`
1419- Default: `hour12`
1420
1421**Options**
1422
14231. 12-hour format:
1424
1425```json
1426{
1427 "hour_format": "hour12"
1428}
1429```
1430
14312. 24-hour format:
1432
1433```json
1434{
1435 "hour_format": "hour24"
1436}
1437```
1438
1439## Languages
1440
1441- Description: Configuration for specific languages.
1442- Setting: `languages`
1443- Default: `null`
1444
1445**Options**
1446
1447To override settings for a language, add an entry for that languages name to the `languages` value. Example:
1448
1449```json
1450"languages": {
1451 "C": {
1452 "format_on_save": "off",
1453 "preferred_line_length": 64,
1454 "soft_wrap": "preferred_line_length"
1455 },
1456 "JSON": {
1457 "tab_size": 4
1458 }
1459}
1460```
1461
1462The following settings can be overridden for each specific language:
1463
1464- [`enable_language_server`](#enable-language-server)
1465- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
1466- [`format_on_save`](#format-on-save)
1467- [`formatter`](#formatter)
1468- [`hard_tabs`](#hard-tabs)
1469- [`preferred_line_length`](#preferred-line-length)
1470- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
1471- [`show_inline_completions`](#show-inline-completions)
1472- [`show_whitespaces`](#show-whitespaces)
1473- [`soft_wrap`](#soft-wrap)
1474- [`tab_size`](#tab-size)
1475- [`use_autoclose`](#use-autoclose)
1476- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
1477
1478These values take in the same options as the root-level settings with the same name.
1479
1480## Network Proxy
1481
1482- Description: Configure a network proxy for Zed.
1483- Setting: `proxy`
1484- Default: `null`
1485
1486**Options**
1487
1488The proxy setting must contain a URL to the proxy.
1489
1490The following URI schemes are supported:
1491
1492- `http`
1493- `https`
1494- `socks4` - SOCKS4 proxy with local DNS
1495- `socks4a` - SOCKS4 proxy with remote DNS
1496- `socks5` - SOCKS5 proxy with local DNS
1497- `socks5h` - SOCKS5 proxy with remote DNS
1498
1499`http` will be used when no scheme is specified.
1500
1501By 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`.
1502
1503For example, to set an `http` proxy, add the following to your settings:
1504
1505```json
1506{
1507 "proxy": "http://127.0.0.1:10809"
1508}
1509```
1510
1511Or to set a `socks5` proxy:
1512
1513```json
1514{
1515 "proxy": "socks5h://localhost:10808"
1516}
1517```
1518
1519## Preview tabs
1520
1521- Description:
1522 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. \
1523 There are several ways to convert a preview tab into a regular tab:
1524
1525 - Double-clicking on the file
1526 - Double-clicking on the tab header
1527 - Using the `project_panel::OpenPermanent` action
1528 - Editing the file
1529 - Dragging the file to a different pane
1530
1531- Setting: `preview_tabs`
1532- Default:
1533
1534```json
1535"preview_tabs": {
1536 "enabled": true,
1537 "enable_preview_from_file_finder": false,
1538 "enable_preview_from_code_navigation": false,
1539}
1540```
1541
1542### Enable preview from file finder
1543
1544- Description: Determines whether to open files in preview mode when selected from the file finder.
1545- Setting: `enable_preview_from_file_finder`
1546- Default: `false`
1547
1548**Options**
1549
1550`boolean` values
1551
1552### Enable preview from code navigation
1553
1554- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
1555- Setting: `enable_preview_from_code_navigation`
1556- Default: `false`
1557
1558**Options**
1559
1560`boolean` values
1561
1562## File Finder
1563
1564### Modal Max Width
1565
1566- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
1567- Setting: `max_modal_width`
1568- Default: `small`
1569
1570## Preferred Line Length
1571
1572- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
1573- Setting: `preferred_line_length`
1574- Default: `80`
1575
1576**Options**
1577
1578`integer` values
1579
1580## Projects Online By Default
1581
1582- Description: Whether or not to show the online projects view by default.
1583- Setting: `projects_online_by_default`
1584- Default: `true`
1585
1586**Options**
1587
1588`boolean` values
1589
1590## Remove Trailing Whitespace On Save
1591
1592- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
1593- Setting: `remove_trailing_whitespace_on_save`
1594- Default: `true`
1595
1596**Options**
1597
1598`boolean` values
1599
1600## Search
1601
1602- Description: Search options to enable by default when opening new project and buffer searches.
1603- Setting: `search`
1604- Default:
1605
1606```json
1607"search": {
1608 "whole_word": false,
1609 "case_sensitive": false,
1610 "include_ignored": false,
1611 "regex": false
1612},
1613```
1614
1615## Show Call Status Icon
1616
1617- Description: Whether or not to show the call status icon in the status bar.
1618- Setting: `show_call_status_icon`
1619- Default: `true`
1620
1621**Options**
1622
1623`boolean` values
1624
1625## Show Completions On Input
1626
1627- Description: Whether or not to show completions as you type.
1628- Setting: `show_completions_on_input`
1629- Default: `true`
1630
1631**Options**
1632
1633`boolean` values
1634
1635## Show Completion Documentation
1636
1637- Description: Whether to display inline and alongside documentation for items in the completions menu.
1638- Setting: `show_completion_documentation`
1639- Default: `true`
1640
1641**Options**
1642
1643`boolean` values
1644
1645## Show Inline Completions
1646
1647- Description: Whether to show inline completions as you type or manually by triggering `editor::ShowInlineCompletion`.
1648- Setting: `show_inline_completions`
1649- Default: `true`
1650
1651**Options**
1652
1653`boolean` values
1654
1655## Show Whitespaces
1656
1657- Description: Whether or not to show render whitespace characters in the editor.
1658- Setting: `show_whitespaces`
1659- Default: `selection`
1660
1661**Options**
1662
16631. `all`
16642. `selection`
16653. `none`
16664. `boundary`
1667
1668## Soft Wrap
1669
1670- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
1671- Setting: `soft_wrap`
1672- Default: `none`
1673
1674**Options**
1675
16761. `none` to avoid wrapping generally, unless the line is too long
16772. `prefer_line` (deprecated, same as `none`)
16783. `editor_width` to wrap lines that overflow the editor width
16794. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
16805. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
1681
1682## Wrap Guides (Vertical Rulers)
1683
1684- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
1685- Setting: `wrap_guides`
1686- Default: []
1687
1688**Options**
1689
1690List of `integer` column numbers
1691
1692## Tab Size
1693
1694- Description: The number of spaces to use for each tab character.
1695- Setting: `tab_size`
1696- Default: `4`
1697
1698**Options**
1699
1700`integer` values
1701
1702## Telemetry
1703
1704- Description: Control what info is collected by Zed.
1705- Setting: `telemetry`
1706- Default:
1707
1708```json
1709"telemetry": {
1710 "diagnostics": true,
1711 "metrics": true
1712},
1713```
1714
1715**Options**
1716
1717### Diagnostics
1718
1719- Description: Setting for sending debug-related data, such as crash reports.
1720- Setting: `diagnostics`
1721- Default: `true`
1722
1723**Options**
1724
1725`boolean` values
1726
1727### Metrics
1728
1729- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
1730- Setting: `metrics`
1731- Default: `true`
1732
1733**Options**
1734
1735`boolean` values
1736
1737## Terminal
1738
1739- Description: Configuration for the terminal.
1740- Setting: `terminal`
1741- Default:
1742
1743```json
1744{
1745 "terminal": {
1746 "alternate_scroll": "off",
1747 "blinking": "terminal_controlled",
1748 "copy_on_select": false,
1749 "dock": "bottom",
1750 "detect_venv": {
1751 "on": {
1752 "directories": [".env", "env", ".venv", "venv"],
1753 "activate_script": "default"
1754 }
1755 },
1756 "env": {},
1757 "font_family": null,
1758 "font_features": null,
1759 "font_size": null,
1760 "line_height": "comfortable",
1761 "option_as_meta": false,
1762 "button": false,
1763 "shell": {},
1764 "toolbar": {
1765 "breadcrumbs": true
1766 },
1767 "working_directory": "current_project_directory"
1768 }
1769}
1770```
1771
1772### Terminal: Dock
1773
1774- Description: Control the position of the dock
1775- Setting: `dock`
1776- Default: `bottom`
1777
1778**Options**
1779
1780`"bottom"`, `"left"` or `"right"`
1781
1782### Terminal: Alternate Scroll
1783
1784- 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.
1785- Setting: `alternate_scroll`
1786- Default: `off`
1787
1788**Options**
1789
17901. Default alternate scroll mode to on
1791
1792```json
1793{
1794 "terminal": {
1795 "alternate_scroll": "on"
1796 }
1797}
1798```
1799
18002. Default alternate scroll mode to off
1801
1802```json
1803{
1804 "terminal": {
1805 "alternate_scroll": "off"
1806 }
1807}
1808```
1809
1810### Terminal: Blinking
1811
1812- Description: Set the cursor blinking behavior in the terminal
1813- Setting: `blinking`
1814- Default: `terminal_controlled`
1815
1816**Options**
1817
18181. Never blink the cursor, ignore the terminal mode
1819
1820```json
1821{
1822 "terminal": {
1823 "blinking": "off"
1824 }
1825}
1826```
1827
18282. Default the cursor blink to off, but allow the terminal to turn blinking on
1829
1830```json
1831{
1832 "terminal": {
1833 "blinking": "terminal_controlled"
1834 }
1835}
1836```
1837
18383. Always blink the cursor, ignore the terminal mode
1839
1840```json
1841{
1842 "terminal": {
1843 "blinking": "on"
1844 }
1845}
1846```
1847
1848### Terminal: Copy On Select
1849
1850- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
1851- Setting: `copy_on_select`
1852- Default: `false`
1853
1854**Options**
1855
1856`boolean` values
1857
1858**Example**
1859
1860```json
1861{
1862 "terminal": {
1863 "copy_on_select": true
1864 }
1865}
1866```
1867
1868### Terminal: Env
1869
1870- 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
1871- Setting: `env`
1872- Default: `{}`
1873
1874**Example**
1875
1876```json
1877{
1878 "terminal": {
1879 "env": {
1880 "ZED": "1",
1881 "KEY": "value1:value2"
1882 }
1883 }
1884}
1885```
1886
1887### Terminal: Font Size
1888
1889- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
1890- Setting: `font_size`
1891- Default: `null`
1892
1893**Options**
1894
1895`integer` values
1896
1897```json
1898{
1899 "terminal": {
1900 "font_size": 15
1901 }
1902}
1903```
1904
1905### Terminal: Font Family
1906
1907- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
1908- Setting: `font_family`
1909- Default: `null`
1910
1911**Options**
1912
1913The name of any font family installed on the user's system
1914
1915```json
1916{
1917 "terminal": {
1918 "font_family": "Berkeley Mono"
1919 }
1920}
1921```
1922
1923### Terminal: Font Features
1924
1925- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
1926- Setting: `font_features`
1927- Default: `null`
1928- Platform: macOS and Windows.
1929
1930**Options**
1931
1932See Buffer Font Features
1933
1934```json
1935{
1936 "terminal": {
1937 "font_features": {
1938 "calt": false
1939 // See Buffer Font Features for more features
1940 }
1941 }
1942}
1943```
1944
1945### Terminal: Line Height
1946
1947- Description: Set the terminal's line height.
1948- Setting: `line_height`
1949- Default: `comfortable`
1950
1951**Options**
1952
19531. Use a line height that's `comfortable` for reading, 1.618. (default)
1954
1955```json
1956{
1957 "terminal": {
1958 "line_height": "comfortable"
1959 }
1960}
1961```
1962
19632. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
1964
1965```json
1966{
1967 "terminal": {
1968 "line_height": "standard"
1969 }
1970}
1971```
1972
19733. Use a custom line height.
1974
1975```json
1976{
1977 "terminal": {
1978 "line_height": {
1979 "custom": 2
1980 }
1981 }
1982}
1983```
1984
1985### Terminal: Option As Meta
1986
1987- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
1988- Setting: `option_as_meta`
1989- Default: `false`
1990
1991**Options**
1992
1993`boolean` values
1994
1995```json
1996{
1997 "terminal": {
1998 "option_as_meta": true
1999 }
2000}
2001```
2002
2003### Terminal: Shell
2004
2005- Description: What shell to use when launching the terminal.
2006- Setting: `shell`
2007- Default: `system`
2008
2009**Options**
2010
20111. Use the system's default terminal configuration (usually the `/etc/passwd` file).
2012
2013```json
2014{
2015 "terminal": {
2016 "shell": "system"
2017 }
2018}
2019```
2020
20212. A program to launch:
2022
2023```json
2024{
2025 "terminal": {
2026 "shell": {
2027 "program": "sh"
2028 }
2029 }
2030}
2031```
2032
20333. A program with arguments:
2034
2035```json
2036{
2037 "terminal": {
2038 "shell": {
2039 "with_arguments": {
2040 "program": "/bin/bash",
2041 "args": ["--login"]
2042 }
2043 }
2044 }
2045}
2046```
2047
2048## Terminal: Detect Virtual Environments {#terminal-detect_venv}
2049
2050- 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.
2051- Setting: `detect_venv`
2052- Default:
2053
2054```json
2055{
2056 "terminal": {
2057 "detect_venv": {
2058 "on": {
2059 // Default directories to search for virtual environments, relative
2060 // to the current working directory. We recommend overriding this
2061 // in your project's settings, rather than globally.
2062 "directories": [".venv", "venv"],
2063 // Can also be `csh`, `fish`, and `nushell`
2064 "activate_script": "default"
2065 }
2066 }
2067 }
2068}
2069```
2070
2071Disable with:
2072
2073```json
2074{
2075 "terminal": {
2076 "detect_venv": "off"
2077 }
2078}
2079```
2080
2081## Terminal: Toolbar
2082
2083- Description: Whether or not to show various elements in the terminal toolbar.
2084- Setting: `toolbar`
2085- Default:
2086
2087```json
2088{
2089 "terminal": {
2090 "toolbar": {
2091 "breadcrumbs": true
2092 }
2093 }
2094}
2095```
2096
2097**Options**
2098
2099At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
2100
2101If the terminal title is empty, the breadcrumbs won't be shown.
2102
2103The shell running in the terminal needs to be configured to emit the title.
2104
2105Example command to set the title: `echo -e "\e]2;New Title\007";`
2106
2107### Terminal: Button
2108
2109- Description: Control to show or hide the terminal button in the status bar
2110- Setting: `button`
2111- Default: `true`
2112
2113**Options**
2114
2115`boolean` values
2116
2117```json
2118{
2119 "terminal": {
2120 "button": false
2121 }
2122}
2123```
2124
2125### Terminal: Working Directory
2126
2127- Description: What working directory to use when launching the terminal.
2128- Setting: `working_directory`
2129- Default: `"current_project_directory"`
2130
2131**Options**
2132
21331. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
2134
2135```json
2136{
2137 "terminal": {
2138 "working_directory": "current_project_directory"
2139 }
2140}
2141```
2142
21432. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
2144
2145```json
2146{
2147 "terminal": {
2148 "working_directory": "first_project_directory"
2149 }
2150}
2151```
2152
21533. Always use this platform's home directory (if we can find it)
2154
2155```json
2156{
2157 "terminal": {
2158 "working_directory": "always_home"
2159 }
2160}
2161```
2162
21634. 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.
2164
2165```json
2166{
2167 "terminal": {
2168 "working_directory": {
2169 "always": {
2170 "directory": "~/zed/projects/"
2171 }
2172 }
2173 }
2174}
2175```
2176
2177## Theme
2178
2179- 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.
2180- Setting: `theme`
2181- Default: `One Dark`
2182
2183### Theme Object
2184
2185- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2186- Setting: `theme`
2187- Default:
2188
2189```json
2190"theme": {
2191 "mode": "system",
2192 "dark": "One Dark",
2193 "light": "One Light"
2194},
2195```
2196
2197### Mode
2198
2199- Description: Specify theme mode.
2200- Setting: `mode`
2201- Default: `system`
2202
2203**Options**
2204
22051. Set the theme to dark mode
2206
2207```json
2208{
2209 "mode": "dark"
2210}
2211```
2212
22132. Set the theme to light mode
2214
2215```json
2216{
2217 "mode": "light"
2218}
2219```
2220
22213. Set the theme to system mode
2222
2223```json
2224{
2225 "mode": "system"
2226}
2227```
2228
2229### Dark
2230
2231- Description: The name of the dark Zed theme to use for the UI.
2232- Setting: `dark`
2233- Default: `One Dark`
2234
2235**Options**
2236
2237Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2238
2239### Light
2240
2241- Description: The name of the light Zed theme to use for the UI.
2242- Setting: `light`
2243- Default: `One Light`
2244
2245**Options**
2246
2247Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2248
2249## Vim
2250
2251- Description: Whether or not to enable vim mode (work in progress).
2252- Setting: `vim_mode`
2253- Default: `false`
2254
2255## Project Panel
2256
2257- Description: Customize project panel
2258- Setting: `project_panel`
2259- Default:
2260
2261```json
2262{
2263 "project_panel": {
2264 "button": true,
2265 "default_width": 240,
2266 "dock": "left",
2267 "entry_spacing": "comfortable",
2268 "file_icons": true,
2269 "folder_icons": true,
2270 "git_status": true,
2271 "indent_size": 20,
2272 "indent_guides": true,
2273 "auto_reveal_entries": true,
2274 "auto_fold_dirs": true,
2275 "scrollbar": {
2276 "show": null
2277 },
2278 "indent_guides": {
2279 "show": "always"
2280 }
2281 }
2282}
2283```
2284
2285### Dock
2286
2287- Description: Control the position of the dock
2288- Setting: `dock`
2289- Default: `left`
2290
2291**Options**
2292
22931. Default dock position to left
2294
2295```json
2296{
2297 "dock": "left"
2298}
2299```
2300
23012. Default dock position to right
2302
2303```json
2304{
2305 "dock": "right"
2306}
2307```
2308
2309### Entry Spacing
2310
2311- Description: Spacing between worktree entries
2312- Setting: `entry_spacing`
2313- Default: `comfortable`
2314
2315**Options**
2316
23171. Comfortable entry spacing
2318
2319```json
2320{
2321 "entry_spacing": "comfortable"
2322}
2323```
2324
23252. Standard entry spacing
2326
2327```json
2328{
2329 "entry_spacing": "standard"
2330}
2331```
2332
2333### Git Status
2334
2335- Description: Indicates newly created and updated files
2336- Setting: `git_status`
2337- Default: `true`
2338
2339**Options**
2340
23411. Default enable git status
2342
2343```json
2344{
2345 "git_status": true
2346}
2347```
2348
23492. Default disable git status
2350
2351```json
2352{
2353 "git_status": false
2354}
2355```
2356
2357### Default Width
2358
2359- Description: Customize default width taken by project panel
2360- Setting: `default_width`
2361- Default: N/A width in pixels (eg: 420)
2362
2363**Options**
2364
2365`boolean` values
2366
2367### Auto Reveal Entries
2368
2369- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
2370- Setting: `auto_reveal_entries`
2371- Default: `true`
2372
2373**Options**
2374
23751. Enable auto reveal entries
2376
2377```json
2378{
2379 "auto_reveal_entries": true
2380}
2381```
2382
23832. Disable auto reveal entries
2384
2385```json
2386{
2387 "auto_reveal_entries": false
2388}
2389```
2390
2391### Auto Fold Dirs
2392
2393- Description: Whether to fold directories automatically when directory has only one directory inside.
2394- Setting: `auto_fold_dirs`
2395- Default: `true`
2396
2397**Options**
2398
23991. Enable auto fold dirs
2400
2401```json
2402{
2403 "auto_fold_dirs": true
2404}
2405```
2406
24072. Disable auto fold dirs
2408
2409```json
2410{
2411 "auto_fold_dirs": false
2412}
2413```
2414
2415### Indent Size
2416
2417- Description: Amount of indentation (in pixels) for nested items.
2418- Setting: `indent_size`
2419- Default: `20`
2420
2421### Indent Guides: Show
2422
2423- Description: Whether to show indent guides in the project panel. Possible values: "always", "never".
2424- Setting: `indent_guides`
2425
2426```json
2427"indent_guides": {
2428 "show": "always"
2429}
2430```
2431
2432**Options**
2433
24341. Show indent guides in the project panel
2435
2436```json
2437{
2438 "indent_guides": {
2439 "show": "always"
2440 }
2441}
2442```
2443
24442. Hide indent guides in the project panel
2445
2446```json
2447{
2448 "indent_guides": {
2449 "show": "never"
2450 }
2451}
2452```
2453
2454### Scrollbar: Show
2455
2456- 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.
2457- Setting: `scrollbar`
2458- Default:
2459
2460```json
2461"scrollbar": {
2462 "show": null
2463}
2464```
2465
2466**Options**
2467
24681. Show scrollbar in the project panel
2469
2470```json
2471{
2472 "scrollbar": {
2473 "show": "always"
2474 }
2475}
2476```
2477
24782. Hide scrollbar in the project panel
2479
2480```json
2481{
2482 "scrollbar": {
2483 "show": "never"
2484 }
2485}
2486```
2487
2488## Assistant Panel
2489
2490- Description: Customize assistant panel
2491- Setting: `assistant`
2492- Default:
2493
2494```json
2495"assistant": {
2496 "enabled": true,
2497 "button": true,
2498 "dock": "right",
2499 "default_width": 640,
2500 "default_height": 320,
2501 "provider": "openai",
2502 "version": "1",
2503},
2504```
2505
2506## Outline Panel
2507
2508- Description: Customize outline Panel
2509- Setting: `outline_panel`
2510- Default:
2511
2512```json
2513"outline_panel": {
2514 "button": true,
2515 "default_width": 240,
2516 "dock": "left",
2517 "file_icons": true,
2518 "folder_icons": true,
2519 "git_status": true,
2520 "indent_size": 20,
2521 "auto_reveal_entries": true,
2522 "auto_fold_dirs": true,
2523 "indent_guides": {
2524 "show": "always"
2525 },
2526 "scrollbar": {
2527 "show": null
2528 }
2529}
2530```
2531
2532## Calls
2533
2534- Description: Customize behavior when participating in a call
2535- Setting: `calls`
2536- Default:
2537
2538```json
2539"calls": {
2540 // Join calls with the microphone live by default
2541 "mute_on_join": false,
2542 // Share your project when you are the first to join a channel
2543 "share_on_join": false
2544},
2545```
2546
2547## Unnecessary Code Fade
2548
2549- Description: How much to fade out unused code.
2550- Setting: `unnecessary_code_fade`
2551- Default: `0.3`
2552
2553**Options**
2554
2555Float values between `0.0` and `0.9`, where:
2556
2557- `0.0` means no fading (unused code looks the same as used code)
2558- `0.9` means maximum fading (unused code is very faint but still visible)
2559
2560**Example**
2561
2562```json
2563{
2564 "unnecessary_code_fade": 0.5
2565}
2566```
2567
2568## UI Font Family
2569
2570- Description: The name of the font to use for text in the UI.
2571- Setting: `ui_font_family`
2572- Default: `Zed Plex Sans`
2573
2574**Options**
2575
2576The name of any font family installed on the system.
2577
2578## UI Font Features
2579
2580- Description: The OpenType features to enable for text in the UI.
2581- Setting: `ui_font_features`
2582- Default: `null`
2583- Platform: macOS and Windows.
2584
2585**Options**
2586
2587Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
2588
2589For example, to disable font ligatures, add the following to your settings:
2590
2591```json
2592{
2593 "ui_font_features": {
2594 "calt": false
2595 }
2596}
2597```
2598
2599You can also set other OpenType features, like setting `cv01` to `7`:
2600
2601```json
2602{
2603 "ui_font_features": {
2604 "cv01": 7
2605 }
2606}
2607```
2608
2609## UI Font Fallbacks
2610
2611- Description: The font fallbacks to use for text in the UI.
2612- Setting: `ui_font_fallbacks`
2613- Default: `null`
2614- Platform: macOS and Windows.
2615
2616**Options**
2617
2618For example, to use `Nerd Font` as a fallback, add the following to your settings:
2619
2620```json
2621{
2622 "ui_font_fallbacks": ["Nerd Font"]
2623}
2624```
2625
2626## UI Font Size
2627
2628- Description: The default font size for text in the UI.
2629- Setting: `ui_font_size`
2630- Default: `16`
2631
2632**Options**
2633
2634`integer` values from `6` to `100` pixels (inclusive)
2635
2636## UI Font Weight
2637
2638- Description: The default font weight for text in the UI.
2639- Setting: `ui_font_weight`
2640- Default: `400`
2641
2642**Options**
2643
2644`integer` values between `100` and `900`
2645
2646## An example configuration:
2647
2648```json
2649// ~/.config/zed/settings.json
2650{
2651 "theme": "cave-light",
2652 "tab_size": 2,
2653 "preferred_line_length": 80,
2654 "soft_wrap": "none",
2655
2656 "buffer_font_size": 18,
2657 "buffer_font_family": "Zed Plex Mono",
2658
2659 "autosave": "on_focus_change",
2660 "format_on_save": "off",
2661 "vim_mode": false,
2662 "projects_online_by_default": true,
2663 "terminal": {
2664 "font_family": "FiraCode Nerd Font Mono",
2665 "blinking": "off"
2666 },
2667 "languages": {
2668 "C": {
2669 "format_on_save": "language_server",
2670 "preferred_line_length": 64,
2671 "soft_wrap": "preferred_line_length"
2672 }
2673 }
2674}
2675```