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 {"external": {
1001 "command": "sed",
1002 "arguments": ["-e", "s/ *$//"]
1003 }
1004 ]
1005}
1006```
1007
1008Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1009If any of the formatters fails, the subsequent ones will still be executed.
1010
1011## Code Actions On Format
1012
1013- Description: The code actions to perform with the primary language server when formatting the buffer.
1014- Setting: `code_actions_on_format`
1015- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
1016
1017**Examples**
1018
1019<!--
1020TBD: Add Python Ruff source.organizeImports example
1021-->
1022
10231. Organize imports on format in TypeScript and TSX buffers:
1024
1025```json
1026{
1027 "languages": {
1028 "TypeScript": {
1029 "code_actions_on_format": {
1030 "source.organizeImports": true
1031 }
1032 },
1033 "TSX": {
1034 "code_actions_on_format": {
1035 "source.organizeImports": true
1036 }
1037 }
1038 }
1039}
1040```
1041
10422. Run ESLint `fixAll` code action when formatting:
1043
1044```json
1045{
1046 "languages": {
1047 "JavaScript": {
1048 "code_actions_on_format": {
1049 "source.fixAll.eslint": true
1050 }
1051 }
1052 }
1053}
1054```
1055
10563. Run only a single ESLint rule when using `fixAll`:
1057
1058```json
1059{
1060 "languages": {
1061 "JavaScript": {
1062 "code_actions_on_format": {
1063 "source.fixAll.eslint": true
1064 }
1065 }
1066 },
1067 "lsp": {
1068 "eslint": {
1069 "settings": {
1070 "codeActionOnSave": {
1071 "rules": ["import/order"]
1072 }
1073 }
1074 }
1075 }
1076}
1077```
1078
1079## Auto close
1080
1081- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1082- Setting: `use_autoclose`
1083- Default: `true`
1084
1085**Options**
1086
1087`boolean` values
1088
1089## Always Treat Brackets As Autoclosed
1090
1091- Description: Controls how the editor handles the autoclosed characters.
1092- Setting: `always_treat_brackets_as_autoclosed`
1093- Default: `false`
1094
1095**Options**
1096
1097`boolean` values
1098
1099**Example**
1100
1101If the setting is set to `true`:
1102
11031. Enter in the editor: `)))`
11042. Move the cursor to the start: `^)))`
11053. Enter again: `)))`
1106
1107The result is still `)))` and not `))))))`, which is what it would be by default.
1108
1109## File Scan Exclusions
1110
1111- Setting: `file_scan_exclusions`
1112- 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.
1113- Default:
1114
1115```json
1116"file_scan_exclusions": [
1117 "**/.git",
1118 "**/.svn",
1119 "**/.hg",
1120 "**/.jj",
1121 "**/CVS",
1122 "**/.DS_Store",
1123 "**/Thumbs.db",
1124 "**/.classpath",
1125 "**/.settings"
1126],
1127```
1128
1129Note, 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.
1130
1131## File Types
1132
1133- Setting: `file_types`
1134- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1135- Default: `{}`
1136
1137**Examples**
1138
1139To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1140
1141```json
1142{
1143 "file_types": {
1144 "C++": ["c"],
1145 "TOML": ["MyLockFile"],
1146 "Dockerfile": ["Dockerfile*"]
1147 }
1148}
1149```
1150
1151## Git
1152
1153- Description: Configuration for git-related features.
1154- Setting: `git`
1155- Default:
1156
1157```json
1158{
1159 "git": {
1160 "git_gutter": "tracked_files",
1161 "inline_blame": {
1162 "enabled": true
1163 }
1164 }
1165}
1166```
1167
1168### Git Gutter
1169
1170- Description: Whether or not to show the git gutter.
1171- Setting: `git_gutter`
1172- Default: `tracked_files`
1173
1174**Options**
1175
11761. Show git gutter in tracked files
1177
1178```json
1179{
1180 "git": {
1181 "git_gutter": "tracked_files"
1182 }
1183}
1184```
1185
11862. Hide git gutter
1187
1188```json
1189{
1190 "git": {
1191 "git_gutter": "hide"
1192 }
1193}
1194```
1195
1196### Inline Git Blame
1197
1198- Description: Whether or not to show git blame information inline, on the currently focused line.
1199- Setting: `inline_blame`
1200- Default:
1201
1202```json
1203{
1204 "git": {
1205 "inline_blame": {
1206 "enabled": true
1207 }
1208 }
1209}
1210```
1211
1212**Options**
1213
12141. Disable inline git blame:
1215
1216```json
1217{
1218 "git": {
1219 "inline_blame": {
1220 "enabled": false
1221 }
1222 }
1223}
1224```
1225
12262. Only show inline git blame after a delay (that starts after cursor stops moving):
1227
1228```json
1229{
1230 "git": {
1231 "inline_blame": {
1232 "enabled": true,
1233 "delay_ms": 500
1234 }
1235 }
1236}
1237```
1238
12393. Show a commit summary next to the commit date and author:
1240
1241```json
1242{
1243 "git": {
1244 "inline_blame": {
1245 "enabled": true,
1246 "show_commit_summary": true
1247 }
1248 }
1249}
1250```
1251
12524. Use this as the minimum column at which to display inline blame information:
1253
1254```json
1255{
1256 "git": {
1257 "inline_blame": {
1258 "enabled": true,
1259 "min_column": 80
1260 }
1261 }
1262}
1263```
1264
1265## Indent Guides
1266
1267- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
1268- Setting: `indent_guides`
1269- Default:
1270
1271```json
1272{
1273 "indent_guides": {
1274 "enabled": true,
1275 "line_width": 1,
1276 "active_line_width": 1,
1277 "coloring": "fixed",
1278 "background_coloring": "disabled"
1279 }
1280}
1281```
1282
1283**Options**
1284
12851. Disable indent guides
1286
1287```json
1288{
1289 "indent_guides": {
1290 "enabled": false
1291 }
1292}
1293```
1294
12952. Enable indent guides for a specific language.
1296
1297```json
1298{
1299 "languages": {
1300 "Python": {
1301 "indent_guides": {
1302 "enabled": true
1303 }
1304 }
1305 }
1306}
1307```
1308
13093. Enable indent aware coloring ("rainbow indentation").
1310 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.
1311
1312```json
1313{
1314 "indent_guides": {
1315 "enabled": true,
1316 "coloring": "indent_aware"
1317 }
1318}
1319```
1320
13214. Enable indent aware background coloring ("rainbow indentation").
1322 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.
1323
1324```json
1325{
1326 "indent_guides": {
1327 "enabled": true,
1328 "coloring": "indent_aware",
1329 "background_coloring": "indent_aware"
1330 }
1331}
1332```
1333
1334## Hard Tabs
1335
1336- Description: Whether to indent lines using tab characters or multiple spaces.
1337- Setting: `hard_tabs`
1338- Default: `false`
1339
1340**Options**
1341
1342`boolean` values
1343
1344## Hover Popover Enabled
1345
1346- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
1347- Setting: `hover_popover_enabled`
1348- Default: `true`
1349
1350**Options**
1351
1352`boolean` values
1353
1354## Inlay hints
1355
1356- Description: Configuration for displaying extra text with hints in the editor.
1357- Setting: `inlay_hints`
1358- Default:
1359
1360```json
1361"inlay_hints": {
1362 "enabled": false,
1363 "show_type_hints": true,
1364 "show_parameter_hints": true,
1365 "show_other_hints": true,
1366 "show_background": false,
1367 "edit_debounce_ms": 700,
1368 "scroll_debounce_ms": 50
1369}
1370```
1371
1372**Options**
1373
1374Inlay hints querying consists of two parts: editor (client) and LSP server.
1375With 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.
1376At 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.
1377
1378The following languages have inlay hints preconfigured by Zed:
1379
1380- [Go](https://docs.zed.dev/languages/go)
1381- [Rust](https://docs.zed.dev/languages/rust)
1382- [Svelte](https://docs.zed.dev/languages/svelte)
1383- [Typescript](https://docs.zed.dev/languages/typescript)
1384
1385Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
1386
1387Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
1388Settings-related hint updates are not debounced.
1389
1390## Journal
1391
1392- Description: Configuration for the journal.
1393- Setting: `journal`
1394- Default:
1395
1396```json
1397"journal": {
1398 "path": "~",
1399 "hour_format": "hour12"
1400}
1401```
1402
1403### Path
1404
1405- Description: The path of the directory where journal entries are stored.
1406- Setting: `path`
1407- Default: `~`
1408
1409**Options**
1410
1411`string` values
1412
1413### Hour Format
1414
1415- Description: The format to use for displaying hours in the journal.
1416- Setting: `hour_format`
1417- Default: `hour12`
1418
1419**Options**
1420
14211. 12-hour format:
1422
1423```json
1424{
1425 "hour_format": "hour12"
1426}
1427```
1428
14292. 24-hour format:
1430
1431```json
1432{
1433 "hour_format": "hour24"
1434}
1435```
1436
1437## Languages
1438
1439- Description: Configuration for specific languages.
1440- Setting: `languages`
1441- Default: `null`
1442
1443**Options**
1444
1445To override settings for a language, add an entry for that languages name to the `languages` value. Example:
1446
1447```json
1448"languages": {
1449 "C": {
1450 "format_on_save": "off",
1451 "preferred_line_length": 64,
1452 "soft_wrap": "preferred_line_length"
1453 },
1454 "JSON": {
1455 "tab_size": 4
1456 }
1457}
1458```
1459
1460The following settings can be overridden for each specific language:
1461
1462- [`enable_language_server`](#enable-language-server)
1463- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
1464- [`format_on_save`](#format-on-save)
1465- [`formatter`](#formatter)
1466- [`hard_tabs`](#hard-tabs)
1467- [`preferred_line_length`](#preferred-line-length)
1468- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
1469- [`show_inline_completions`](#show-inline-completions)
1470- [`show_whitespaces`](#show-whitespaces)
1471- [`soft_wrap`](#soft-wrap)
1472- [`tab_size`](#tab-size)
1473- [`use_autoclose`](#use-autoclose)
1474- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
1475
1476These values take in the same options as the root-level settings with the same name.
1477
1478## Network Proxy
1479
1480- Description: Configure a network proxy for Zed.
1481- Setting: `proxy`
1482- Default: `null`
1483
1484**Options**
1485
1486The proxy setting must contain a URL to the proxy.
1487
1488The following URI schemes are supported:
1489
1490- `http`
1491- `https`
1492- `socks4` - SOCKS4 proxy with local DNS
1493- `socks4a` - SOCKS4 proxy with remote DNS
1494- `socks5` - SOCKS5 proxy with local DNS
1495- `socks5h` - SOCKS5 proxy with remote DNS
1496
1497`http` will be used when no scheme is specified.
1498
1499By 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`.
1500
1501For example, to set an `http` proxy, add the following to your settings:
1502
1503```json
1504{
1505 "proxy": "http://127.0.0.1:10809"
1506}
1507```
1508
1509Or to set a `socks5` proxy:
1510
1511```json
1512{
1513 "proxy": "socks5h://localhost:10808"
1514}
1515```
1516
1517## Preview tabs
1518
1519- Description:
1520 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. \
1521 There are several ways to convert a preview tab into a regular tab:
1522
1523 - Double-clicking on the file
1524 - Double-clicking on the tab header
1525 - Using the `project_panel::OpenPermanent` action
1526 - Editing the file
1527 - Dragging the file to a different pane
1528
1529- Setting: `preview_tabs`
1530- Default:
1531
1532```json
1533"preview_tabs": {
1534 "enabled": true,
1535 "enable_preview_from_file_finder": false,
1536 "enable_preview_from_code_navigation": false,
1537}
1538```
1539
1540### Enable preview from file finder
1541
1542- Description: Determines whether to open files in preview mode when selected from the file finder.
1543- Setting: `enable_preview_from_file_finder`
1544- Default: `false`
1545
1546**Options**
1547
1548`boolean` values
1549
1550### Enable preview from code navigation
1551
1552- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
1553- Setting: `enable_preview_from_code_navigation`
1554- Default: `false`
1555
1556**Options**
1557
1558`boolean` values
1559
1560## File Finder
1561
1562### Modal Max Width
1563
1564- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
1565- Setting: `max_modal_width`
1566- Default: `small`
1567
1568## Preferred Line Length
1569
1570- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
1571- Setting: `preferred_line_length`
1572- Default: `80`
1573
1574**Options**
1575
1576`integer` values
1577
1578## Projects Online By Default
1579
1580- Description: Whether or not to show the online projects view by default.
1581- Setting: `projects_online_by_default`
1582- Default: `true`
1583
1584**Options**
1585
1586`boolean` values
1587
1588## Remove Trailing Whitespace On Save
1589
1590- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
1591- Setting: `remove_trailing_whitespace_on_save`
1592- Default: `true`
1593
1594**Options**
1595
1596`boolean` values
1597
1598## Search
1599
1600- Description: Search options to enable by default when opening new project and buffer searches.
1601- Setting: `search`
1602- Default:
1603
1604```json
1605"search": {
1606 "whole_word": false,
1607 "case_sensitive": false,
1608 "include_ignored": false,
1609 "regex": false
1610},
1611```
1612
1613## Show Call Status Icon
1614
1615- Description: Whether or not to show the call status icon in the status bar.
1616- Setting: `show_call_status_icon`
1617- Default: `true`
1618
1619**Options**
1620
1621`boolean` values
1622
1623## Show Completions On Input
1624
1625- Description: Whether or not to show completions as you type.
1626- Setting: `show_completions_on_input`
1627- Default: `true`
1628
1629**Options**
1630
1631`boolean` values
1632
1633## Show Completion Documentation
1634
1635- Description: Whether to display inline and alongside documentation for items in the completions menu.
1636- Setting: `show_completion_documentation`
1637- Default: `true`
1638
1639**Options**
1640
1641`boolean` values
1642
1643## Show Inline Completions
1644
1645- Description: Whether to show inline completions as you type or manually by triggering `editor::ShowInlineCompletion`.
1646- Setting: `show_inline_completions`
1647- Default: `true`
1648
1649**Options**
1650
1651`boolean` values
1652
1653## Show Whitespaces
1654
1655- Description: Whether or not to show render whitespace characters in the editor.
1656- Setting: `show_whitespaces`
1657- Default: `selection`
1658
1659**Options**
1660
16611. `all`
16622. `selection`
16633. `none`
16644. `boundary`
1665
1666## Soft Wrap
1667
1668- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
1669- Setting: `soft_wrap`
1670- Default: `none`
1671
1672**Options**
1673
16741. `none` to avoid wrapping generally, unless the line is too long
16752. `prefer_line` (deprecated, same as `none`)
16763. `editor_width` to wrap lines that overflow the editor width
16774. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
16785. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
1679
1680## Wrap Guides (Vertical Rulers)
1681
1682- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
1683- Setting: `wrap_guides`
1684- Default: []
1685
1686**Options**
1687
1688List of `integer` column numbers
1689
1690## Tab Size
1691
1692- Description: The number of spaces to use for each tab character.
1693- Setting: `tab_size`
1694- Default: `4`
1695
1696**Options**
1697
1698`integer` values
1699
1700## Telemetry
1701
1702- Description: Control what info is collected by Zed.
1703- Setting: `telemetry`
1704- Default:
1705
1706```json
1707"telemetry": {
1708 "diagnostics": true,
1709 "metrics": true
1710},
1711```
1712
1713**Options**
1714
1715### Diagnostics
1716
1717- Description: Setting for sending debug-related data, such as crash reports.
1718- Setting: `diagnostics`
1719- Default: `true`
1720
1721**Options**
1722
1723`boolean` values
1724
1725### Metrics
1726
1727- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
1728- Setting: `metrics`
1729- Default: `true`
1730
1731**Options**
1732
1733`boolean` values
1734
1735## Terminal
1736
1737- Description: Configuration for the terminal.
1738- Setting: `terminal`
1739- Default:
1740
1741```json
1742{
1743 "terminal": {
1744 "alternate_scroll": "off",
1745 "blinking": "terminal_controlled",
1746 "copy_on_select": false,
1747 "dock": "bottom",
1748 "detect_venv": {
1749 "on": {
1750 "directories": [".env", "env", ".venv", "venv"],
1751 "activate_script": "default"
1752 }
1753 },
1754 "env": {},
1755 "font_family": null,
1756 "font_features": null,
1757 "font_size": null,
1758 "line_height": "comfortable",
1759 "option_as_meta": false,
1760 "button": false,
1761 "shell": {},
1762 "toolbar": {
1763 "breadcrumbs": true
1764 },
1765 "working_directory": "current_project_directory"
1766 }
1767}
1768```
1769
1770### Terminal: Dock
1771
1772- Description: Control the position of the dock
1773- Setting: `dock`
1774- Default: `bottom`
1775
1776**Options**
1777
1778`"bottom"`, `"left"` or `"right"`
1779
1780### Terminal: Alternate Scroll
1781
1782- 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.
1783- Setting: `alternate_scroll`
1784- Default: `off`
1785
1786**Options**
1787
17881. Default alternate scroll mode to on
1789
1790```json
1791{
1792 "terminal": {
1793 "alternate_scroll": "on"
1794 }
1795}
1796```
1797
17982. Default alternate scroll mode to off
1799
1800```json
1801{
1802 "terminal": {
1803 "alternate_scroll": "off"
1804 }
1805}
1806```
1807
1808### Terminal: Blinking
1809
1810- Description: Set the cursor blinking behavior in the terminal
1811- Setting: `blinking`
1812- Default: `terminal_controlled`
1813
1814**Options**
1815
18161. Never blink the cursor, ignore the terminal mode
1817
1818```json
1819{
1820 "terminal": {
1821 "blinking": "off"
1822 }
1823}
1824```
1825
18262. Default the cursor blink to off, but allow the terminal to turn blinking on
1827
1828```json
1829{
1830 "terminal": {
1831 "blinking": "terminal_controlled"
1832 }
1833}
1834```
1835
18363. Always blink the cursor, ignore the terminal mode
1837
1838```json
1839{
1840 "terminal": {
1841 "blinking": "on"
1842 }
1843}
1844```
1845
1846### Terminal: Copy On Select
1847
1848- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
1849- Setting: `copy_on_select`
1850- Default: `false`
1851
1852**Options**
1853
1854`boolean` values
1855
1856**Example**
1857
1858```json
1859{
1860 "terminal": {
1861 "copy_on_select": true
1862 }
1863}
1864```
1865
1866### Terminal: Env
1867
1868- 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
1869- Setting: `env`
1870- Default: `{}`
1871
1872**Example**
1873
1874```json
1875{
1876 "terminal": {
1877 "env": {
1878 "ZED": "1",
1879 "KEY": "value1:value2"
1880 }
1881 }
1882}
1883```
1884
1885### Terminal: Font Size
1886
1887- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
1888- Setting: `font_size`
1889- Default: `null`
1890
1891**Options**
1892
1893`integer` values
1894
1895```json
1896{
1897 "terminal": {
1898 "font_size": 15
1899 }
1900}
1901```
1902
1903### Terminal: Font Family
1904
1905- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
1906- Setting: `font_family`
1907- Default: `null`
1908
1909**Options**
1910
1911The name of any font family installed on the user's system
1912
1913```json
1914{
1915 "terminal": {
1916 "font_family": "Berkeley Mono"
1917 }
1918}
1919```
1920
1921### Terminal: Font Features
1922
1923- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
1924- Setting: `font_features`
1925- Default: `null`
1926- Platform: macOS and Windows.
1927
1928**Options**
1929
1930See Buffer Font Features
1931
1932```json
1933{
1934 "terminal": {
1935 "font_features": {
1936 "calt": false
1937 // See Buffer Font Features for more features
1938 }
1939 }
1940}
1941```
1942
1943### Terminal: Line Height
1944
1945- Description: Set the terminal's line height.
1946- Setting: `line_height`
1947- Default: `comfortable`
1948
1949**Options**
1950
19511. Use a line height that's `comfortable` for reading, 1.618. (default)
1952
1953```json
1954{
1955 "terminal": {
1956 "line_height": "comfortable"
1957 }
1958}
1959```
1960
19612. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
1962
1963```json
1964{
1965 "terminal": {
1966 "line_height": "standard"
1967 }
1968}
1969```
1970
19713. Use a custom line height.
1972
1973```json
1974{
1975 "terminal": {
1976 "line_height": {
1977 "custom": 2
1978 }
1979 }
1980}
1981```
1982
1983### Terminal: Option As Meta
1984
1985- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
1986- Setting: `option_as_meta`
1987- Default: `false`
1988
1989**Options**
1990
1991`boolean` values
1992
1993```json
1994{
1995 "terminal": {
1996 "option_as_meta": true
1997 }
1998}
1999```
2000
2001### Terminal: Shell
2002
2003- Description: What shell to use when launching the terminal.
2004- Setting: `shell`
2005- Default: `system`
2006
2007**Options**
2008
20091. Use the system's default terminal configuration (usually the `/etc/passwd` file).
2010
2011```json
2012{
2013 "terminal": {
2014 "shell": "system"
2015 }
2016}
2017```
2018
20192. A program to launch:
2020
2021```json
2022{
2023 "terminal": {
2024 "shell": {
2025 "program": "sh"
2026 }
2027 }
2028}
2029```
2030
20313. A program with arguments:
2032
2033```json
2034{
2035 "terminal": {
2036 "shell": {
2037 "with_arguments": {
2038 "program": "/bin/bash",
2039 "args": ["--login"]
2040 }
2041 }
2042 }
2043}
2044```
2045
2046## Terminal: Detect Virtual Environments {#terminal-detect_venv}
2047
2048- 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.
2049- Setting: `detect_venv`
2050- Default:
2051
2052```json
2053{
2054 "terminal": {
2055 "detect_venv": {
2056 "on": {
2057 // Default directories to search for virtual environments, relative
2058 // to the current working directory. We recommend overriding this
2059 // in your project's settings, rather than globally.
2060 "directories": [".venv", "venv"],
2061 // Can also be `csh`, `fish`, and `nushell`
2062 "activate_script": "default"
2063 }
2064 }
2065 }
2066}
2067```
2068
2069Disable with:
2070
2071```json
2072{
2073 "terminal": {
2074 "detect_venv": "off"
2075 }
2076}
2077```
2078
2079## Terminal: Toolbar
2080
2081- Description: Whether or not to show various elements in the terminal toolbar.
2082- Setting: `toolbar`
2083- Default:
2084
2085```json
2086{
2087 "terminal": {
2088 "toolbar": {
2089 "breadcrumbs": true
2090 }
2091 }
2092}
2093```
2094
2095**Options**
2096
2097At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
2098
2099If the terminal title is empty, the breadcrumbs won't be shown.
2100
2101The shell running in the terminal needs to be configured to emit the title.
2102
2103Example command to set the title: `echo -e "\e]2;New Title\007";`
2104
2105### Terminal: Button
2106
2107- Description: Control to show or hide the terminal button in the status bar
2108- Setting: `button`
2109- Default: `true`
2110
2111**Options**
2112
2113`boolean` values
2114
2115```json
2116{
2117 "terminal": {
2118 "button": false
2119 }
2120}
2121```
2122
2123### Terminal: Working Directory
2124
2125- Description: What working directory to use when launching the terminal.
2126- Setting: `working_directory`
2127- Default: `"current_project_directory"`
2128
2129**Options**
2130
21311. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
2132
2133```json
2134{
2135 "terminal": {
2136 "working_directory": "current_project_directory"
2137 }
2138}
2139```
2140
21412. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
2142
2143```json
2144{
2145 "terminal": {
2146 "working_directory": "first_project_directory"
2147 }
2148}
2149```
2150
21513. Always use this platform's home directory (if we can find it)
2152
2153```json
2154{
2155 "terminal": {
2156 "working_directory": "always_home"
2157 }
2158}
2159```
2160
21614. 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.
2162
2163```json
2164{
2165 "terminal": {
2166 "working_directory": {
2167 "always": {
2168 "directory": "~/zed/projects/"
2169 }
2170 }
2171 }
2172}
2173```
2174
2175## Theme
2176
2177- 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.
2178- Setting: `theme`
2179- Default: `One Dark`
2180
2181### Theme Object
2182
2183- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2184- Setting: `theme`
2185- Default:
2186
2187```json
2188"theme": {
2189 "mode": "system",
2190 "dark": "One Dark",
2191 "light": "One Light"
2192},
2193```
2194
2195### Mode
2196
2197- Description: Specify theme mode.
2198- Setting: `mode`
2199- Default: `system`
2200
2201**Options**
2202
22031. Set the theme to dark mode
2204
2205```json
2206{
2207 "mode": "dark"
2208}
2209```
2210
22112. Set the theme to light mode
2212
2213```json
2214{
2215 "mode": "light"
2216}
2217```
2218
22193. Set the theme to system mode
2220
2221```json
2222{
2223 "mode": "system"
2224}
2225```
2226
2227### Dark
2228
2229- Description: The name of the dark Zed theme to use for the UI.
2230- Setting: `dark`
2231- Default: `One Dark`
2232
2233**Options**
2234
2235Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2236
2237### Light
2238
2239- Description: The name of the light Zed theme to use for the UI.
2240- Setting: `light`
2241- Default: `One Light`
2242
2243**Options**
2244
2245Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2246
2247## Vim
2248
2249- Description: Whether or not to enable vim mode (work in progress).
2250- Setting: `vim_mode`
2251- Default: `false`
2252
2253## Project Panel
2254
2255- Description: Customize project panel
2256- Setting: `project_panel`
2257- Default:
2258
2259```json
2260{
2261 "project_panel": {
2262 "button": true,
2263 "default_width": 240,
2264 "dock": "left",
2265 "entry_spacing": "comfortable",
2266 "file_icons": true,
2267 "folder_icons": true,
2268 "git_status": true,
2269 "indent_size": 20,
2270 "indent_guides": true,
2271 "auto_reveal_entries": true,
2272 "auto_fold_dirs": true,
2273 "scrollbar": {
2274 "show": null
2275 },
2276 "indent_guides": {
2277 "show": "always"
2278 }
2279 }
2280}
2281```
2282
2283### Dock
2284
2285- Description: Control the position of the dock
2286- Setting: `dock`
2287- Default: `left`
2288
2289**Options**
2290
22911. Default dock position to left
2292
2293```json
2294{
2295 "dock": "left"
2296}
2297```
2298
22992. Default dock position to right
2300
2301```json
2302{
2303 "dock": "right"
2304}
2305```
2306
2307### Entry Spacing
2308
2309- Description: Spacing between worktree entries
2310- Setting: `entry_spacing`
2311- Default: `comfortable`
2312
2313**Options**
2314
23151. Comfortable entry spacing
2316
2317```json
2318{
2319 "entry_spacing": "comfortable"
2320}
2321```
2322
23232. Standard entry spacing
2324
2325```json
2326{
2327 "entry_spacing": "standard"
2328}
2329```
2330
2331### Git Status
2332
2333- Description: Indicates newly created and updated files
2334- Setting: `git_status`
2335- Default: `true`
2336
2337**Options**
2338
23391. Default enable git status
2340
2341```json
2342{
2343 "git_status": true
2344}
2345```
2346
23472. Default disable git status
2348
2349```json
2350{
2351 "git_status": false
2352}
2353```
2354
2355### Default Width
2356
2357- Description: Customize default width taken by project panel
2358- Setting: `default_width`
2359- Default: N/A width in pixels (eg: 420)
2360
2361**Options**
2362
2363`boolean` values
2364
2365### Auto Reveal Entries
2366
2367- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
2368- Setting: `auto_reveal_entries`
2369- Default: `true`
2370
2371**Options**
2372
23731. Enable auto reveal entries
2374
2375```json
2376{
2377 "auto_reveal_entries": true
2378}
2379```
2380
23812. Disable auto reveal entries
2382
2383```json
2384{
2385 "auto_reveal_entries": false
2386}
2387```
2388
2389### Auto Fold Dirs
2390
2391- Description: Whether to fold directories automatically when directory has only one directory inside.
2392- Setting: `auto_fold_dirs`
2393- Default: `true`
2394
2395**Options**
2396
23971. Enable auto fold dirs
2398
2399```json
2400{
2401 "auto_fold_dirs": true
2402}
2403```
2404
24052. Disable auto fold dirs
2406
2407```json
2408{
2409 "auto_fold_dirs": false
2410}
2411```
2412
2413### Indent Size
2414
2415- Description: Amount of indentation (in pixels) for nested items.
2416- Setting: `indent_size`
2417- Default: `20`
2418
2419### Indent Guides: Show
2420
2421- Description: Whether to show indent guides in the project panel. Possible values: "always", "never".
2422- Setting: `indent_guides`
2423
2424```json
2425"indent_guides": {
2426 "show": "always"
2427}
2428```
2429
2430**Options**
2431
24321. Show indent guides in the project panel
2433
2434```json
2435{
2436 "indent_guides": {
2437 "show": "always"
2438 }
2439}
2440```
2441
24422. Hide indent guides in the project panel
2443
2444```json
2445{
2446 "indent_guides": {
2447 "show": "never"
2448 }
2449}
2450```
2451
2452### Scrollbar: Show
2453
2454- 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.
2455- Setting: `scrollbar`
2456- Default:
2457
2458```json
2459"scrollbar": {
2460 "show": null
2461}
2462```
2463
2464**Options**
2465
24661. Show scrollbar in the project panel
2467
2468```json
2469{
2470 "scrollbar": {
2471 "show": "always"
2472 }
2473}
2474```
2475
24762. Hide scrollbar in the project panel
2477
2478```json
2479{
2480 "scrollbar": {
2481 "show": "never"
2482 }
2483}
2484```
2485
2486## Assistant Panel
2487
2488- Description: Customize assistant panel
2489- Setting: `assistant`
2490- Default:
2491
2492```json
2493"assistant": {
2494 "enabled": true,
2495 "button": true,
2496 "dock": "right",
2497 "default_width": 640,
2498 "default_height": 320,
2499 "provider": "openai",
2500 "version": "1",
2501},
2502```
2503
2504## Outline Panel
2505
2506- Description: Customize outline Panel
2507- Setting: `outline_panel`
2508- Default:
2509
2510```json
2511"outline_panel": {
2512 "button": true,
2513 "default_width": 240,
2514 "dock": "left",
2515 "file_icons": true,
2516 "folder_icons": true,
2517 "git_status": true,
2518 "indent_size": 20,
2519 "auto_reveal_entries": true,
2520 "auto_fold_dirs": true,
2521 "indent_guides": {
2522 "show": "always"
2523 },
2524 "scrollbar": {
2525 "show": null
2526 }
2527}
2528```
2529
2530## Calls
2531
2532- Description: Customize behavior when participating in a call
2533- Setting: `calls`
2534- Default:
2535
2536```json
2537"calls": {
2538 // Join calls with the microphone live by default
2539 "mute_on_join": false,
2540 // Share your project when you are the first to join a channel
2541 "share_on_join": false
2542},
2543```
2544
2545## Unnecessary Code Fade
2546
2547- Description: How much to fade out unused code.
2548- Setting: `unnecessary_code_fade`
2549- Default: `0.3`
2550
2551**Options**
2552
2553Float values between `0.0` and `0.9`, where:
2554
2555- `0.0` means no fading (unused code looks the same as used code)
2556- `0.9` means maximum fading (unused code is very faint but still visible)
2557
2558**Example**
2559
2560```json
2561{
2562 "unnecessary_code_fade": 0.5
2563}
2564```
2565
2566## UI Font Family
2567
2568- Description: The name of the font to use for text in the UI.
2569- Setting: `ui_font_family`
2570- Default: `Zed Plex Sans`
2571
2572**Options**
2573
2574The name of any font family installed on the system.
2575
2576## UI Font Features
2577
2578- Description: The OpenType features to enable for text in the UI.
2579- Setting: `ui_font_features`
2580- Default: `null`
2581- Platform: macOS and Windows.
2582
2583**Options**
2584
2585Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
2586
2587For example, to disable font ligatures, add the following to your settings:
2588
2589```json
2590{
2591 "ui_font_features": {
2592 "calt": false
2593 }
2594}
2595```
2596
2597You can also set other OpenType features, like setting `cv01` to `7`:
2598
2599```json
2600{
2601 "ui_font_features": {
2602 "cv01": 7
2603 }
2604}
2605```
2606
2607## UI Font Fallbacks
2608
2609- Description: The font fallbacks to use for text in the UI.
2610- Setting: `ui_font_fallbacks`
2611- Default: `null`
2612- Platform: macOS and Windows.
2613
2614**Options**
2615
2616For example, to use `Nerd Font` as a fallback, add the following to your settings:
2617
2618```json
2619{
2620 "ui_font_fallbacks": ["Nerd Font"]
2621}
2622```
2623
2624## UI Font Size
2625
2626- Description: The default font size for text in the UI.
2627- Setting: `ui_font_size`
2628- Default: `16`
2629
2630**Options**
2631
2632`integer` values from `6` to `100` pixels (inclusive)
2633
2634## UI Font Weight
2635
2636- Description: The default font weight for text in the UI.
2637- Setting: `ui_font_weight`
2638- Default: `400`
2639
2640**Options**
2641
2642`integer` values between `100` and `900`
2643
2644## An example configuration:
2645
2646```json
2647// ~/.config/zed/settings.json
2648{
2649 "theme": "cave-light",
2650 "tab_size": 2,
2651 "preferred_line_length": 80,
2652 "soft_wrap": "none",
2653
2654 "buffer_font_size": 18,
2655 "buffer_font_family": "Zed Plex Mono",
2656
2657 "autosave": "on_focus_change",
2658 "format_on_save": "off",
2659 "vim_mode": false,
2660 "projects_online_by_default": true,
2661 "terminal": {
2662 "font_family": "FiraCode Nerd Font Mono",
2663 "blinking": "off"
2664 },
2665 "languages": {
2666 "C": {
2667 "format_on_save": "language_server",
2668 "preferred_line_length": 64,
2669 "soft_wrap": "preferred_line_length"
2670 }
2671 }
2672}
2673```