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## Auto Update
137
138- Description: Whether or not to automatically check for updates.
139- Setting: `auto_update`
140- Default: `true`
141
142**Options**
143
144`boolean` values
145
146## Base Keymap
147
148- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
149- Setting: `base_keymap`
150- Default: `VSCode`
151
152**Options**
153
1541. VSCode
155
156```json
157{
158 "base_keymap": "VSCode"
159}
160```
161
1622. Atom
163
164```json
165{
166 "base_keymap": "Atom"
167}
168```
169
1703. JetBrains
171
172```json
173{
174 "base_keymap": "JetBrains"
175}
176```
177
1784. None
179
180```json
181{
182 "base_keymap": "None"
183}
184```
185
1865. SublimeText
187
188```json
189{
190 "base_keymap": "SublimeText"
191}
192```
193
1946. TextMate
195
196```json
197{
198 "base_keymap": "TextMate"
199}
200```
201
202## Buffer Font Family
203
204- Description: The name of a font to use for rendering text in the editor.
205- Setting: `buffer_font_family`
206- Default: `Zed Plex Mono`
207
208**Options**
209
210The name of any font family installed on the user's system
211
212## Buffer Font Features
213
214- Description: The OpenType features to enable for text in the editor.
215- Setting: `buffer_font_features`
216- Default: `null`
217- Platform: macOS and Windows.
218
219**Options**
220
221Zed 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.
222
223For example, to disable font ligatures, add the following to your settings:
224
225```json
226{
227 "buffer_font_features": {
228 "calt": false
229 }
230}
231```
232
233You can also set other OpenType features, like setting `cv01` to `7`:
234
235```json
236{
237 "buffer_font_features": {
238 "cv01": 7
239 }
240}
241```
242
243## Buffer Font Fallbacks
244
245- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
246- Setting: `buffer_font_fallbacks`
247- Default: `null`
248- Platform: macOS and Windows.
249
250**Options**
251
252For example, to use `Nerd Font` as a fallback, add the following to your settings:
253
254```json
255{
256 "buffer_font_fallbacks": ["Nerd Font"]
257}
258```
259
260## Buffer Font Size
261
262- Description: The default font size for text in the editor.
263- Setting: `buffer_font_size`
264- Default: `15`
265
266**Options**
267
268`integer` values from `6` to `100` pixels (inclusive)
269
270## Buffer Font Weight
271
272- Description: The default font weight for text in the editor.
273- Setting: `buffer_font_weight`
274- Default: `400`
275
276**Options**
277
278`integer` values between `100` and `900`
279
280## Buffer Line Height
281
282- Description: The default line height for text in the editor.
283- Setting: `buffer_line_height`
284- Default: `"comfortable"`
285
286**Options**
287
288`"standard"`, `"comfortable"` or `{"custom": float}` (`1` is very compact, `2` very loose)
289
290## Confirm Quit
291
292- Description: Whether or not to prompt the user to confirm before closing the application.
293- Setting: `confirm_quit`
294- Default: `false`
295
296**Options**
297
298`boolean` values
299
300## Centered Layout
301
302- Description: Configuration for the centered layout mode.
303- Setting: `centered_layout`
304- Default:
305
306```json
307"centered_layout": {
308 "left_padding": 0.2,
309 "right_padding": 0.2,
310}
311```
312
313**Options**
314
315The `left_padding` and `right_padding` options define the relative width of the
316left 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`.
317
318## Direnv Integration
319
320- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
321 `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.
322 It also allows for those environment variables to be used in tasks.
323- Setting: `load_direnv`
324- Default:
325
326```json
327"load_direnv": "direct"
328```
329
330**Options**
331There are two options to choose from:
332
3331. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
3342. `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.
335
336## Inline Completions
337
338- Description: Settings for inline completions.
339- Setting: `inline_completions`
340- Default:
341
342```json
343"inline_completions": {
344 "disabled_globs": [
345 ".env"
346 ]
347}
348```
349
350**Options**
351
352### Disabled Globs
353
354- Description: A list of globs representing files that inline completions should be disabled for.
355- Setting: `disabled_globs`
356- Default: `[".env"]`
357
358**Options**
359
360List of `string` values
361
362## Current Line Highlight
363
364- Description: How to highlight the current line in the editor.
365- Setting: `current_line_highlight`
366- Default: `all`
367
368**Options**
369
3701. Don't highlight the current line:
371
372```json
373"current_line_highlight": "none"
374```
375
3762. Highlight the gutter area:
377
378```json
379"current_line_highlight": "gutter"
380```
381
3823. Highlight the editor area:
383
384```json
385"current_line_highlight": "line"
386```
387
3884. Highlight the full line:
389
390```json
391"current_line_highlight": "all"
392```
393
394## Cursor Blink
395
396- Description: Whether or not the cursor blinks.
397- Setting: `cursor_blink`
398- Default: `true`
399
400**Options**
401
402`boolean` values
403
404## Cursor Shape
405
406- Description: Cursor shape for the default editor.
407- Setting: `cursor_shape`
408- Default: `bar`
409
410**Options**
411
4121. A vertical bar:
413
414```json
415"cursor_shape": "bar"
416```
417
4182. A block that surrounds the following character:
419
420```json
421"cursor_shape": "block"
422```
423
4243. An underline / underscore that runs along the following character:
425
426```json
427"cursor_shape": "underline"
428```
429
4304. An box drawn around the following character:
431
432```json
433"cursor_shape": "hollow"
434```
435
436**Options**
437
4381. Position the dock attached to the bottom of the workspace: `bottom`
4392. Position the dock to the right of the workspace like a side panel: `right`
4403. Position the dock full screen over the entire workspace: `expanded`
441
442## Editor Scrollbar
443
444- Description: Whether or not to show the editor scrollbar and various elements in it.
445- Setting: `scrollbar`
446- Default:
447
448```json
449"scrollbar": {
450 "show": "auto",
451 "cursors": true,
452 "git_diff": true,
453 "search_results": true,
454 "selected_symbol": true,
455 "diagnostics": true
456},
457```
458
459### Show Mode
460
461- Description: When to show the editor scrollbar.
462- Setting: `show`
463- Default: `auto`
464
465**Options**
466
4671. Show the scrollbar if there's important information or follow the system's configured behavior:
468
469```json
470"scrollbar": {
471 "show": "auto"
472}
473```
474
4752. Match the system's configured behavior:
476
477```json
478"scrollbar": {
479 "show": "system"
480}
481```
482
4833. Always show the scrollbar:
484
485```json
486"scrollbar": {
487 "show": "always"
488}
489```
490
4914. Never show the scrollbar:
492
493```json
494"scrollbar": {
495 "show": "never"
496}
497```
498
499### Cursor Indicators
500
501- Description: Whether to show cursor positions in the scrollbar.
502- Setting: `cursors`
503- Default: `true`
504
505**Options**
506
507`boolean` values
508
509### Git Diff Indicators
510
511- Description: Whether to show git diff indicators in the scrollbar.
512- Setting: `git_diff`
513- Default: `true`
514
515**Options**
516
517`boolean` values
518
519### Search Results Indicators
520
521- Description: Whether to show buffer search results in the scrollbar.
522- Setting: `search_results`
523- Default: `true`
524
525**Options**
526
527`boolean` values
528
529### Selected Symbols Indicators
530
531- Description: Whether to show selected symbol occurrences in the scrollbar.
532- Setting: `selected_symbol`
533- Default: `true`
534
535**Options**
536
537`boolean` values
538
539### Diagnostics
540
541- Description: Whether to show diagnostic indicators in the scrollbar.
542- Setting: `diagnostics`
543- Default: `true`
544
545**Options**
546
547`boolean` values
548
549## Editor Tab Bar
550
551- Description: Settings related to the editor's tab bar.
552- Settings: `tab_bar`
553- Default:
554
555```json
556"tab_bar": {
557 "show": true,
558 "show_nav_history_buttons": true
559}
560```
561
562### Show
563
564- Description: Whether or not to show the tab bar in the editor.
565- Setting: `show`
566- Default: `true`
567
568**Options**
569
570`boolean` values
571
572### Navigation History Buttons
573
574- Description: Whether or not to show the navigation history buttons.
575- Setting: `show_nav_history_buttons`
576- Default: `true`
577
578**Options**
579
580`boolean` values
581
582## Editor Tabs
583
584- Description: Configuration for the editor tabs.
585- Setting: `tabs`
586- Default:
587
588```json
589"tabs": {
590 "close_position": "right",
591 "file_icons": false,
592 "git_status": false,
593 "activate_on_close": "history"
594},
595```
596
597### Close Position
598
599- Description: Where to display close button within a tab.
600- Setting: `close_position`
601- Default: `right`
602
603**Options**
604
6051. Display the close button on the right:
606
607```json
608{
609 "close_position": "right"
610}
611```
612
6132. Display the close button on the left:
614
615```json
616{
617 "close_position": "left"
618}
619```
620
621### File Icons
622
623- Description: Whether to show the file icon for a tab.
624- Setting: `file_icons`
625- Default: `false`
626
627### Git Status
628
629- Description: Whether or not to show Git file status in tab.
630- Setting: `git_status`
631- Default: `false`
632
633### Activate on close
634
635- Description: What to do after closing the current tab.
636- Setting: `activate_on_close`
637- Default: `history`
638
639**Options**
640
6411. Activate the tab that was open previously:
642
643```json
644{
645 "activate_on_close": "history"
646}
647```
648
6492. Activate the neighbour tab (prefers the right one, if present):
650
651```json
652{
653 "activate_on_close": "neighbour"
654}
655```
656
657## Editor Toolbar
658
659- Description: Whether or not to show various elements in the editor toolbar.
660- Setting: `toolbar`
661- Default:
662
663```json
664"toolbar": {
665 "breadcrumbs": true,
666 "quick_actions": true
667},
668```
669
670**Options**
671
672Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
673
674## Enable Language Server
675
676- Description: Whether or not to use language servers to provide code intelligence.
677- Setting: `enable_language_server`
678- Default: `true`
679
680**Options**
681
682`boolean` values
683
684## Ensure Final Newline On Save
685
686- Description: Whether or not to ensure there's a single newline at the end of a buffer when saving it.
687- Setting: `ensure_final_newline_on_save`
688- Default: `true`
689
690**Options**
691
692`boolean` values
693
694## LSP
695
696- Description: Configuration for language servers.
697- Setting: `lsp`
698- Default: `null`
699
700**Options**
701
702The following settings can be overridden for specific language servers:
703
704- `initialization_options`
705- `settings`
706
707To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
708
709Some 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.
710
711For example to pass the `check` option to `rust-analyzer`, use the following configuration:
712
713```json
714"lsp": {
715 "rust-analyzer": {
716 "initialization_options": {
717 "check": {
718 "command": "clippy" // rust-analyzer.check.command (default: "check")
719 }
720 }
721 }
722}
723```
724
725While other options may be changed at a runtime and should be placed under `settings`:
726
727```json
728"lsp": {
729 "yaml-language-server": {
730 "settings": {
731 "yaml": {
732 "keyOrdering": true // Enforces alphabetical ordering of keys in maps
733 }
734 }
735 }
736}
737```
738
739## Format On Save
740
741- Description: Whether or not to perform a buffer format before saving.
742- Setting: `format_on_save`
743- Default: `on`
744
745**Options**
746
7471. `on`, enables format on save obeying `formatter` setting:
748
749```json
750{
751 "format_on_save": "on"
752}
753```
754
7552. `off`, disables format on save:
756
757```json
758{
759 "format_on_save": "off"
760}
761```
762
763## Formatter
764
765- Description: How to perform a buffer format.
766- Setting: `formatter`
767- Default: `auto`
768
769**Options**
770
7711. To use the current language server, use `"language_server"`:
772
773```json
774{
775 "formatter": "language_server"
776}
777```
778
7792. 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):
780
781```json
782{
783 "formatter": {
784 "external": {
785 "command": "sed",
786 "arguments": ["-e", "s/ *$//"]
787 }
788 }
789}
790```
791
7923. 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.
793
794```json
795 "formatter": {
796 "external": {
797 "command": "prettier",
798 "arguments": ["--stdin-filepath", "{buffer_path}"]
799 }
800 }
801```
802
8034. Or to use code actions provided by the connected language servers, use `"code_actions"`:
804
805```json
806{
807 "formatter": {
808 "code_actions": {
809 // Use ESLint's --fix:
810 "source.fixAll.eslint": true,
811 // Organize imports on save:
812 "source.organizeImports": true
813 }
814 }
815}
816```
817
8185. Or to use multiple formatters consecutively, use an array of formatters:
819
820```json
821{
822 "formatter": [
823 {"language_server": {"name": "rust-analyzer"}},
824 {"external": {
825 "command": "sed",
826 "arguments": ["-e", "s/ *$//"]
827 }
828 ]
829}
830```
831
832Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
833If any of the formatters fails, the subsequent ones will still be executed.
834
835## Code Actions On Format
836
837- Description: The code actions to perform with the primary language server when formatting the buffer.
838- Setting: `code_actions_on_format`
839- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
840
841**Examples**
842
843<!--
844TBD: Add Python Ruff source.organizeImports example
845-->
846
8471. Organize imports on format in TypeScript and TSX buffers:
848
849```json
850{
851 "languages": {
852 "TypeScript": {
853 "code_actions_on_format": {
854 "source.organizeImports": true
855 }
856 },
857 "TSX": {
858 "code_actions_on_format": {
859 "source.organizeImports": true
860 }
861 }
862 }
863}
864```
865
8662. Run ESLint `fixAll` code action when formatting:
867
868```json
869{
870 "languages": {
871 "JavaScript": {
872 "code_actions_on_format": {
873 "source.fixAll.eslint": true
874 }
875 }
876 }
877}
878```
879
8803. Run only a single ESLint rule when using `fixAll`:
881
882```json
883{
884 "languages": {
885 "JavaScript": {
886 "code_actions_on_format": {
887 "source.fixAll.eslint": true
888 }
889 }
890 },
891 "lsp": {
892 "eslint": {
893 "settings": {
894 "codeActionOnSave": {
895 "rules": ["import/order"]
896 }
897 }
898 }
899 }
900}
901```
902
903## Auto close
904
905- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
906- Setting: `use_autoclose`
907- Default: `true`
908
909**Options**
910
911`boolean` values
912
913## Always Treat Brackets As Autoclosed
914
915- Description: Controls how the editor handles the autoclosed characters.
916- Setting: `always_treat_brackets_as_autoclosed`
917- Default: `false`
918
919**Options**
920
921`boolean` values
922
923**Example**
924
925If the setting is set to `true`:
926
9271. Enter in the editor: `)))`
9282. Move the cursor to the start: `^)))`
9293. Enter again: `)))`
930
931The result is still `)))` and not `))))))`, which is what it would be by default.
932
933## File Scan Exclusions
934
935- Setting: `file_scan_exclusions`
936- 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.
937- Default:
938
939```json
940"file_scan_exclusions": [
941 "**/.git",
942 "**/.svn",
943 "**/.hg",
944 "**/CVS",
945 "**/.DS_Store",
946 "**/Thumbs.db",
947 "**/.classpath",
948 "**/.settings"
949],
950```
951
952Note, 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.
953
954## File Types
955
956- Setting: `file_types`
957- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
958- Default: `{}`
959
960**Examples**
961
962To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
963
964```json
965{
966 "file_types": {
967 "C++": ["c"],
968 "TOML": ["MyLockFile"],
969 "Dockerfile": ["Dockerfile*"]
970 }
971}
972```
973
974## Git
975
976- Description: Configuration for git-related features.
977- Setting: `git`
978- Default:
979
980```json
981{
982 "git": {
983 "git_gutter": "tracked_files",
984 "inline_blame": {
985 "enabled": true
986 }
987 }
988}
989```
990
991### Git Gutter
992
993- Description: Whether or not to show the git gutter.
994- Setting: `git_gutter`
995- Default: `tracked_files`
996
997**Options**
998
9991. Show git gutter in tracked files
1000
1001```json
1002{
1003 "git": {
1004 "git_gutter": "tracked_files"
1005 }
1006}
1007```
1008
10092. Hide git gutter
1010
1011```json
1012{
1013 "git": {
1014 "git_gutter": "hide"
1015 }
1016}
1017```
1018
1019### Inline Git Blame
1020
1021- Description: Whether or not to show git blame information inline, on the currently focused line.
1022- Setting: `inline_blame`
1023- Default:
1024
1025```json
1026{
1027 "git": {
1028 "inline_blame": {
1029 "enabled": true
1030 }
1031 }
1032}
1033```
1034
1035**Options**
1036
10371. Disable inline git blame:
1038
1039```json
1040{
1041 "git": {
1042 "inline_blame": {
1043 "enabled": false
1044 }
1045 }
1046}
1047```
1048
10492. Only show inline git blame after a delay (that starts after cursor stops moving):
1050
1051```json
1052{
1053 "git": {
1054 "inline_blame": {
1055 "enabled": true,
1056 "delay_ms": 500
1057 }
1058 }
1059}
1060```
1061
10623. Show a commit summary next to the commit date and author:
1063
1064```json
1065{
1066 "git": {
1067 "inline_blame": {
1068 "enabled": true,
1069 "show_commit_summary": true
1070 }
1071 }
1072}
1073```
1074
10754. Use this as the minimum column at which to display inline blame information:
1076
1077```json
1078{
1079 "git": {
1080 "inline_blame": {
1081 "enabled": true,
1082 "min_column": 80
1083 }
1084 }
1085}
1086```
1087
1088## Indent Guides
1089
1090- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
1091- Setting: `indent_guides`
1092- Default:
1093
1094```json
1095{
1096 "indent_guides": {
1097 "enabled": true,
1098 "line_width": 1,
1099 "active_line_width": 1,
1100 "coloring": "fixed",
1101 "background_coloring": "disabled"
1102 }
1103}
1104```
1105
1106**Options**
1107
11081. Disable indent guides
1109
1110```json
1111{
1112 "indent_guides": {
1113 "enabled": false
1114 }
1115}
1116```
1117
11182. Enable indent guides for a specific language.
1119
1120```json
1121{
1122 "languages": {
1123 "Python": {
1124 "indent_guides": {
1125 "enabled": true
1126 }
1127 }
1128 }
1129}
1130```
1131
11323. Enable indent aware coloring ("rainbow indentation").
1133 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.
1134
1135```json
1136{
1137 "indent_guides": {
1138 "enabled": true,
1139 "coloring": "indent_aware"
1140 }
1141}
1142```
1143
11444. Enable indent aware background coloring ("rainbow indentation").
1145 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.
1146
1147```json
1148{
1149 "indent_guides": {
1150 "enabled": true,
1151 "coloring": "indent_aware",
1152 "background_coloring": "indent_aware"
1153 }
1154}
1155```
1156
1157## Hard Tabs
1158
1159- Description: Whether to indent lines using tab characters or multiple spaces.
1160- Setting: `hard_tabs`
1161- Default: `false`
1162
1163**Options**
1164
1165`boolean` values
1166
1167## Hover Popover Enabled
1168
1169- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
1170- Setting: `hover_popover_enabled`
1171- Default: `true`
1172
1173**Options**
1174
1175`boolean` values
1176
1177## Inlay hints
1178
1179- Description: Configuration for displaying extra text with hints in the editor.
1180- Setting: `inlay_hints`
1181- Default:
1182
1183```json
1184"inlay_hints": {
1185 "enabled": false,
1186 "show_type_hints": true,
1187 "show_parameter_hints": true,
1188 "show_other_hints": true,
1189 "show_background": false,
1190 "edit_debounce_ms": 700,
1191 "scroll_debounce_ms": 50
1192}
1193```
1194
1195**Options**
1196
1197Inlay hints querying consists of two parts: editor (client) and LSP server.
1198With 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.
1199At 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.
1200
1201The following languages have inlay hints preconfigured by Zed:
1202
1203- [Go](https://docs.zed.dev/languages/go)
1204- [Rust](https://docs.zed.dev/languages/rust)
1205- [Svelte](https://docs.zed.dev/languages/svelte)
1206- [Typescript](https://docs.zed.dev/languages/typescript)
1207
1208Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
1209
1210Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
1211Settings-related hint updates are not debounced.
1212
1213## Journal
1214
1215- Description: Configuration for the journal.
1216- Setting: `journal`
1217- Default:
1218
1219```json
1220"journal": {
1221 "path": "~",
1222 "hour_format": "hour12"
1223}
1224```
1225
1226### Path
1227
1228- Description: The path of the directory where journal entries are stored.
1229- Setting: `path`
1230- Default: `~`
1231
1232**Options**
1233
1234`string` values
1235
1236### Hour Format
1237
1238- Description: The format to use for displaying hours in the journal.
1239- Setting: `hour_format`
1240- Default: `hour12`
1241
1242**Options**
1243
12441. 12-hour format:
1245
1246```json
1247{
1248 "hour_format": "hour12"
1249}
1250```
1251
12522. 24-hour format:
1253
1254```json
1255{
1256 "hour_format": "hour24"
1257}
1258```
1259
1260## Languages
1261
1262- Description: Configuration for specific languages.
1263- Setting: `languages`
1264- Default: `null`
1265
1266**Options**
1267
1268To override settings for a language, add an entry for that languages name to the `languages` value. Example:
1269
1270```json
1271"languages": {
1272 "C": {
1273 "format_on_save": "off",
1274 "preferred_line_length": 64,
1275 "soft_wrap": "preferred_line_length"
1276 },
1277 "JSON": {
1278 "tab_size": 4
1279 }
1280}
1281```
1282
1283The following settings can be overridden for each specific language:
1284
1285- `enable_language_server`
1286- `ensure_final_newline_on_save`
1287- `format_on_save`
1288- `formatter`
1289- `hard_tabs`
1290- `preferred_line_length`
1291- `remove_trailing_whitespace_on_save`
1292- `show_inline_completions`
1293- `show_whitespaces`
1294- `soft_wrap`
1295- `tab_size`
1296- `use_autoclose`
1297- `always_treat_brackets_as_autoclosed`
1298
1299These values take in the same options as the root-level settings with the same name.
1300
1301## Network Proxy
1302
1303- Description: Configure a network proxy for Zed.
1304- Setting: `proxy`
1305- Default: `null`
1306
1307**Options**
1308
1309The proxy setting must contain a URL to the proxy.
1310
1311The following URI schemes are supported:
1312
1313- `http`
1314- `https`
1315- `socks4` - SOCKS4 proxy with local DNS
1316- `socks4a` - SOCKS4 proxy with remote DNS
1317- `socks5` - SOCKS5 proxy with local DNS
1318- `socks5h` - SOCKS5 proxy with remote DNS
1319
1320`http` will be used when no scheme is specified.
1321
1322By 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`.
1323
1324For example, to set an `http` proxy, add the following to your settings:
1325
1326```json
1327{
1328 "proxy": "http://127.0.0.1:10809"
1329}
1330```
1331
1332Or to set a `socks5` proxy:
1333
1334```json
1335{
1336 "proxy": "socks5h://localhost:10808"
1337}
1338```
1339
1340## Preview tabs
1341
1342- Description:
1343 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. \
1344 There are several ways to convert a preview tab into a regular tab:
1345
1346 - Double-clicking on the file
1347 - Double-clicking on the tab header
1348 - Using the `project_panel::OpenPermanent` action
1349 - Editing the file
1350 - Dragging the file to a different pane
1351
1352- Setting: `preview_tabs`
1353- Default:
1354
1355```json
1356"preview_tabs": {
1357 "enabled": true,
1358 "enable_preview_from_file_finder": false,
1359 "enable_preview_from_code_navigation": false,
1360}
1361```
1362
1363### Enable preview from file finder
1364
1365- Description: Determines whether to open files in preview mode when selected from the file finder.
1366- Setting: `enable_preview_from_file_finder`
1367- Default: `false`
1368
1369**Options**
1370
1371`boolean` values
1372
1373### Enable preview from code navigation
1374
1375- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
1376- Setting: `enable_preview_from_code_navigation`
1377- Default: `false`
1378
1379**Options**
1380
1381`boolean` values
1382
1383## Preferred Line Length
1384
1385- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
1386- Setting: `preferred_line_length`
1387- Default: `80`
1388
1389**Options**
1390
1391`integer` values
1392
1393## Projects Online By Default
1394
1395- Description: Whether or not to show the online projects view by default.
1396- Setting: `projects_online_by_default`
1397- Default: `true`
1398
1399**Options**
1400
1401`boolean` values
1402
1403## Remove Trailing Whitespace On Save
1404
1405- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
1406- Setting: `remove_trailing_whitespace_on_save`
1407- Default: `true`
1408
1409**Options**
1410
1411`boolean` values
1412
1413## Search
1414
1415- Description: Search options to enable by default when opening new project and buffer searches.
1416- Setting: `search`
1417- Default:
1418
1419```json
1420"search": {
1421 "whole_word": false,
1422 "case_sensitive": false,
1423 "include_ignored": false,
1424 "regex": false
1425},
1426```
1427
1428## Show Call Status Icon
1429
1430- Description: Whether or not to show the call status icon in the status bar.
1431- Setting: `show_call_status_icon`
1432- Default: `true`
1433
1434**Options**
1435
1436`boolean` values
1437
1438## Show Completions On Input
1439
1440- Description: Whether or not to show completions as you type.
1441- Setting: `show_completions_on_input`
1442- Default: `true`
1443
1444**Options**
1445
1446`boolean` values
1447
1448## Show Completion Documentation
1449
1450- Description: Whether to display inline and alongside documentation for items in the completions menu.
1451- Setting: `show_completion_documentation`
1452- Default: `true`
1453
1454**Options**
1455
1456`boolean` values
1457
1458## Completion Documentation Debounce Delay
1459
1460- Description: The debounce delay before re-querying the language server for completion documentation when not included in original completion list.
1461- Setting: `completion_documentation_secondary_query_debounce`
1462- Default: `300` ms
1463
1464**Options**
1465
1466`integer` values
1467
1468## Show Inline Completions
1469
1470- Description: Whether to show inline completions as you type or manually by triggering `editor::ShowInlineCompletion`.
1471- Setting: `show_inline_completions`
1472- Default: `true`
1473
1474**Options**
1475
1476`boolean` values
1477
1478## Show Whitespaces
1479
1480- Description: Whether or not to show render whitespace characters in the editor.
1481- Setting: `show_whitespaces`
1482- Default: `selection`
1483
1484**Options**
1485
14861. `all`
14872. `selection`
14883. `none`
14894. `boundary`
1490
1491## Soft Wrap
1492
1493- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
1494- Setting: `soft_wrap`
1495- Default: `none`
1496
1497**Options**
1498
14991. `none` to avoid wrapping generally, unless the line is too long
15002. `prefer_line` (deprecated, same as `none`)
15013. `editor_width` to wrap lines that overflow the editor width
15024. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
1503
1504## Wrap Guides (Vertical Rulers)
1505
1506- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
1507- Setting: `wrap_guides`
1508- Default: []
1509
1510**Options**
1511
1512List of `integer` column numbers
1513
1514## Tab Size
1515
1516- Description: The number of spaces to use for each tab character.
1517- Setting: `tab_size`
1518- Default: `4`
1519
1520**Options**
1521
1522`integer` values
1523
1524## Telemetry
1525
1526- Description: Control what info is collected by Zed.
1527- Setting: `telemetry`
1528- Default:
1529
1530```json
1531"telemetry": {
1532 "diagnostics": true,
1533 "metrics": true
1534},
1535```
1536
1537**Options**
1538
1539### Diagnostics
1540
1541- Description: Setting for sending debug-related data, such as crash reports.
1542- Setting: `diagnostics`
1543- Default: `true`
1544
1545**Options**
1546
1547`boolean` values
1548
1549### Metrics
1550
1551- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
1552- Setting: `metrics`
1553- Default: `true`
1554
1555**Options**
1556
1557`boolean` values
1558
1559## Terminal
1560
1561- Description: Configuration for the terminal.
1562- Setting: `terminal`
1563- Default:
1564
1565```json
1566{
1567 "terminal": {
1568 "alternate_scroll": "off",
1569 "blinking": "terminal_controlled",
1570 "copy_on_select": false,
1571 "dock": "bottom",
1572 "detect_venv": {
1573 "on": {
1574 "directories": [".env", "env", ".venv", "venv"],
1575 "activate_script": "default"
1576 }
1577 },
1578 "env": {},
1579 "font_family": null,
1580 "font_features": null,
1581 "font_size": null,
1582 "line_height": "comfortable",
1583 "option_as_meta": false,
1584 "button": false,
1585 "shell": {},
1586 "toolbar": {
1587 "title": true
1588 },
1589 "working_directory": "current_project_directory"
1590 }
1591}
1592```
1593
1594### Terminal: Dock
1595
1596- Description: Control the position of the dock
1597- Setting: `dock`
1598- Default: `bottom`
1599
1600**Options**
1601
1602`"bottom"`, `"left"` or `"right"`
1603
1604### Terminal: Alternate Scroll
1605
1606- 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.
1607- Setting: `alternate_scroll`
1608- Default: `off`
1609
1610**Options**
1611
16121. Default alternate scroll mode to on
1613
1614```json
1615{
1616 "terminal": {
1617 "alternate_scroll": "on"
1618 }
1619}
1620```
1621
16222. Default alternate scroll mode to off
1623
1624```json
1625{
1626 "terminal": {
1627 "alternate_scroll": "off"
1628 }
1629}
1630```
1631
1632### Terminal: Blinking
1633
1634- Description: Set the cursor blinking behavior in the terminal
1635- Setting: `blinking`
1636- Default: `terminal_controlled`
1637
1638**Options**
1639
16401. Never blink the cursor, ignore the terminal mode
1641
1642```json
1643{
1644 "terminal": {
1645 "blinking": "off"
1646 }
1647}
1648```
1649
16502. Default the cursor blink to off, but allow the terminal to turn blinking on
1651
1652```json
1653{
1654 "terminal": {
1655 "blinking": "terminal_controlled"
1656 }
1657}
1658```
1659
16603. Always blink the cursor, ignore the terminal mode
1661
1662```json
1663{
1664 "terminal": {
1665 "blinking": "on"
1666 }
1667}
1668```
1669
1670### Terminal: Copy On Select
1671
1672- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
1673- Setting: `copy_on_select`
1674- Default: `false`
1675
1676**Options**
1677
1678`boolean` values
1679
1680**Example**
1681
1682```json
1683{
1684 "terminal": {
1685 "copy_on_select": true
1686 }
1687}
1688```
1689
1690### Terminal: Env
1691
1692- 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
1693- Setting: `env`
1694- Default: `{}`
1695
1696**Example**
1697
1698```json
1699{
1700 "terminal": {
1701 "env": {
1702 "ZED": "1",
1703 "KEY": "value1:value2"
1704 }
1705 }
1706}
1707```
1708
1709### Terminal: Font Size
1710
1711- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
1712- Setting: `font_size`
1713- Default: `null`
1714
1715**Options**
1716
1717`integer` values
1718
1719```json
1720{
1721 "terminal": {
1722 "font_size": 15
1723 }
1724}
1725```
1726
1727### Terminal: Font Family
1728
1729- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
1730- Setting: `font_family`
1731- Default: `null`
1732
1733**Options**
1734
1735The name of any font family installed on the user's system
1736
1737```json
1738{
1739 "terminal": {
1740 "font_family": "Berkeley Mono"
1741 }
1742}
1743```
1744
1745### Terminal: Font Features
1746
1747- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
1748- Setting: `font_features`
1749- Default: `null`
1750- Platform: macOS and Windows.
1751
1752**Options**
1753
1754See Buffer Font Features
1755
1756```json
1757{
1758 "terminal": {
1759 "font_features": {
1760 "calt": false
1761 // See Buffer Font Features for more features
1762 }
1763 }
1764}
1765```
1766
1767### Terminal: Line Height
1768
1769- Description: Set the terminal's line height.
1770- Setting: `line_height`
1771- Default: `comfortable`
1772
1773**Options**
1774
17751. Use a line height that's `comfortable` for reading, 1.618. (default)
1776
1777```json
1778{
1779 "terminal": {
1780 "line_height": "comfortable"
1781 }
1782}
1783```
1784
17852. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
1786
1787```json
1788{
1789 "terminal": {
1790 "line_height": "standard"
1791 }
1792}
1793```
1794
17953. Use a custom line height.
1796
1797```json
1798{
1799 "terminal": {
1800 "line_height": {
1801 "custom": 2
1802 }
1803 }
1804}
1805```
1806
1807### Terminal: Option As Meta
1808
1809- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
1810- Setting: `option_as_meta`
1811- Default: `false`
1812
1813**Options**
1814
1815`boolean` values
1816
1817```json
1818{
1819 "terminal": {
1820 "option_as_meta": true
1821 }
1822}
1823```
1824
1825### Terminal: Shell
1826
1827- Description: What shell to use when launching the terminal.
1828- Setting: `shell`
1829- Default: `system`
1830
1831**Options**
1832
18331. Use the system's default terminal configuration (usually the `/etc/passwd` file).
1834
1835```json
1836{
1837 "terminal": {
1838 "shell": "system"
1839 }
1840}
1841```
1842
18432. A program to launch:
1844
1845```json
1846{
1847 "terminal": {
1848 "shell": {
1849 "program": "sh"
1850 }
1851 }
1852}
1853```
1854
18553. A program with arguments:
1856
1857```json
1858{
1859 "terminal": {
1860 "shell": {
1861 "with_arguments": {
1862 "program": "/bin/bash",
1863 "args": ["--login"]
1864 }
1865 }
1866 }
1867}
1868```
1869
1870## Terminal: Detect Virtual Environments {#terminal-detect_venv}
1871
1872- 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.
1873- Setting: `detect_venv`
1874- Default:
1875
1876```json
1877{
1878 "terminal": {
1879 "detect_venv": {
1880 "on": {
1881 // Default directories to search for virtual environments, relative
1882 // to the current working directory. We recommend overriding this
1883 // in your project's settings, rather than globally.
1884 "directories": [".venv", "venv"],
1885 // Can also be `csh`, `fish`, and `nushell`
1886 "activate_script": "default"
1887 }
1888 }
1889 }
1890}
1891```
1892
1893Disable with:
1894
1895```json
1896{
1897 "terminal": {
1898 "detect_venv": "off"
1899 }
1900}
1901```
1902
1903## Terminal: Toolbar
1904
1905- Description: Whether or not to show various elements in the terminal toolbar. It only affects terminals placed in the editor pane.
1906- Setting: `toolbar`
1907- Default:
1908
1909```json
1910{
1911 "terminal": {
1912 "toolbar": {
1913 "title": true
1914 }
1915 }
1916}
1917```
1918
1919**Options**
1920
1921At the moment, only the `title` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`. If the title is hidden, the terminal toolbar is not displayed.
1922
1923### Terminal: Button
1924
1925- Description: Control to show or hide the terminal button in the status bar
1926- Setting: `button`
1927- Default: `true`
1928
1929**Options**
1930
1931`boolean` values
1932
1933```json
1934{
1935 "terminal": {
1936 "button": false
1937 }
1938}
1939```
1940
1941### Terminal: Working Directory
1942
1943- Description: What working directory to use when launching the terminal.
1944- Setting: `working_directory`
1945- Default: `"current_project_directory"`
1946
1947**Options**
1948
19491. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
1950
1951```json
1952{
1953 "terminal": {
1954 "working_directory": "current_project_directory"
1955 }
1956}
1957```
1958
19592. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
1960
1961```json
1962{
1963 "terminal": {
1964 "working_directory": "first_project_directory"
1965 }
1966}
1967```
1968
19693. Always use this platform's home directory (if we can find it)
1970
1971```json
1972{
1973 "terminal": {
1974 "working_directory": "always_home"
1975 }
1976}
1977```
1978
19794. 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.
1980
1981```json
1982{
1983 "terminal": {
1984 "working_directory": {
1985 "always": {
1986 "directory": "~/zed/projects/"
1987 }
1988 }
1989 }
1990}
1991```
1992
1993## Theme
1994
1995- 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.
1996- Setting: `theme`
1997- Default: `One Dark`
1998
1999### Theme Object
2000
2001- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2002- Setting: `theme`
2003- Default:
2004
2005```json
2006"theme": {
2007 "mode": "system",
2008 "dark": "One Dark",
2009 "light": "One Light"
2010},
2011```
2012
2013### Mode
2014
2015- Description: Specify theme mode.
2016- Setting: `mode`
2017- Default: `system`
2018
2019**Options**
2020
20211. Set the theme to dark mode
2022
2023```json
2024{
2025 "mode": "dark"
2026}
2027```
2028
20292. Set the theme to light mode
2030
2031```json
2032{
2033 "mode": "light"
2034}
2035```
2036
20373. Set the theme to system mode
2038
2039```json
2040{
2041 "mode": "system"
2042}
2043```
2044
2045### Dark
2046
2047- Description: The name of the dark Zed theme to use for the UI.
2048- Setting: `dark`
2049- Default: `One Dark`
2050
2051**Options**
2052
2053Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2054
2055### Light
2056
2057- Description: The name of the light Zed theme to use for the UI.
2058- Setting: `light`
2059- Default: `One Light`
2060
2061**Options**
2062
2063Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2064
2065## Vim
2066
2067- Description: Whether or not to enable vim mode (work in progress).
2068- Setting: `vim_mode`
2069- Default: `false`
2070
2071## Project Panel
2072
2073- Description: Customize project panel
2074- Setting: `project_panel`
2075- Default:
2076
2077```json
2078{
2079 "project_panel": {
2080 "button": true,
2081 "default_width": 240,
2082 "dock": "left",
2083 "file_icons": true,
2084 "folder_icons": true,
2085 "git_status": true,
2086 "indent_size": 20,
2087 "indent_guides": true,
2088 "auto_reveal_entries": true,
2089 "auto_fold_dirs": true,
2090 "scrollbar": {
2091 "show": null
2092 },
2093 "indent_guides": {
2094 "show": "always"
2095 }
2096 }
2097}
2098```
2099
2100### Dock
2101
2102- Description: Control the position of the dock
2103- Setting: `dock`
2104- Default: `left`
2105
2106**Options**
2107
21081. Default dock position to left
2109
2110```json
2111{
2112 "dock": "left"
2113}
2114```
2115
21162. Default dock position to right
2117
2118```json
2119{
2120 "dock": "right"
2121}
2122```
2123
2124### Git Status
2125
2126- Description: Indicates newly created and updated files
2127- Setting: `git_status`
2128- Default: `true`
2129
2130**Options**
2131
21321. Default enable git status
2133
2134```json
2135{
2136 "git_status": true
2137}
2138```
2139
21402. Default disable git status
2141
2142```json
2143{
2144 "git_status": false
2145}
2146```
2147
2148### Default Width
2149
2150- Description: Customize default width taken by project panel
2151- Setting: `default_width`
2152- Default: N/A width in pixels (eg: 420)
2153
2154**Options**
2155
2156`boolean` values
2157
2158### Auto Reveal Entries
2159
2160- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
2161- Setting: `auto_reveal_entries`
2162- Default: `true`
2163
2164**Options**
2165
21661. Enable auto reveal entries
2167
2168```json
2169{
2170 "auto_reveal_entries": true
2171}
2172```
2173
21742. Disable auto reveal entries
2175
2176```json
2177{
2178 "auto_reveal_entries": false
2179}
2180```
2181
2182### Auto Fold Dirs
2183
2184- Description: Whether to fold directories automatically when directory has only one directory inside.
2185- Setting: `auto_fold_dirs`
2186- Default: `true`
2187
2188**Options**
2189
21901. Enable auto fold dirs
2191
2192```json
2193{
2194 "auto_fold_dirs": true
2195}
2196```
2197
21982. Disable auto fold dirs
2199
2200```json
2201{
2202 "auto_fold_dirs": false
2203}
2204```
2205
2206### Indent Size
2207
2208- Description: Amount of indentation (in pixels) for nested items.
2209- Setting: `indent_size`
2210- Default: `20`
2211
2212### Indent Guides: Show
2213
2214- Description: Whether to show indent guides in the project panel. Possible values: "always", "never".
2215- Setting: `indent_guides`
2216
2217```json
2218"indent_guides": {
2219 "show": "always"
2220}
2221```
2222
2223**Options**
2224
22251. Show indent guides in the project panel
2226
2227```json
2228{
2229 "indent_guides": {
2230 "show": "always"
2231 }
2232}
2233```
2234
22352. Hide indent guides in the project panel
2236
2237```json
2238{
2239 "indent_guides": {
2240 "show": "never"
2241 }
2242}
2243```
2244
2245### Scrollbar: Show
2246
2247- 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.
2248- Setting: `scrollbar`
2249- Default:
2250
2251```json
2252"scrollbar": {
2253 "show": null
2254}
2255```
2256
2257**Options**
2258
22591. Show scrollbar in the project panel
2260
2261```json
2262{
2263 "scrollbar": {
2264 "show": "always"
2265 }
2266}
2267```
2268
22692. Hide scrollbar in the project panel
2270
2271```json
2272{
2273 "scrollbar": {
2274 "show": "never"
2275 }
2276}
2277```
2278
2279## Assistant Panel
2280
2281- Description: Customize assistant panel
2282- Setting: `assistant`
2283- Default:
2284
2285```json
2286"assistant": {
2287 "enabled": true,
2288 "button": true,
2289 "dock": "right",
2290 "default_width": 640,
2291 "default_height": 320,
2292 "provider": "openai",
2293 "version": "1",
2294},
2295```
2296
2297## Outline Panel
2298
2299- Description: Customize outline Panel
2300- Setting: `outline_panel`
2301- Default:
2302
2303```json
2304"outline_panel": {
2305 "button": true,
2306 "default_width": 240,
2307 "dock": "left",
2308 "file_icons": true,
2309 "folder_icons": true,
2310 "git_status": true,
2311 "indent_size": 20,
2312 "auto_reveal_entries": true,
2313 "auto_fold_dirs": true,
2314 "indent_guides": {
2315 "show": "always"
2316 },
2317 "scrollbar": {
2318 "show": null
2319 }
2320}
2321```
2322
2323## Calls
2324
2325- Description: Customize behavior when participating in a call
2326- Setting: `calls`
2327- Default:
2328
2329```json
2330"calls": {
2331 // Join calls with the microphone live by default
2332 "mute_on_join": false,
2333 // Share your project when you are the first to join a channel
2334 "share_on_join": false
2335},
2336```
2337
2338## Unnecessary Code Fade
2339
2340- Description: How much to fade out unused code.
2341- Setting: `unnecessary_code_fade`
2342- Default: `0.3`
2343
2344**Options**
2345
2346Float values between `0.0` and `0.9`, where:
2347
2348- `0.0` means no fading (unused code looks the same as used code)
2349- `0.9` means maximum fading (unused code is very faint but still visible)
2350
2351**Example**
2352
2353```json
2354{
2355 "unnecessary_code_fade": 0.5
2356}
2357```
2358
2359## UI Font Family
2360
2361- Description: The name of the font to use for text in the UI.
2362- Setting: `ui_font_family`
2363- Default: `Zed Plex Sans`
2364
2365**Options**
2366
2367The name of any font family installed on the system.
2368
2369## UI Font Features
2370
2371- Description: The OpenType features to enable for text in the UI.
2372- Setting: `ui_font_features`
2373- Default: `null`
2374- Platform: macOS and Windows.
2375
2376**Options**
2377
2378Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
2379
2380For example, to disable font ligatures, add the following to your settings:
2381
2382```json
2383{
2384 "ui_font_features": {
2385 "calt": false
2386 }
2387}
2388```
2389
2390You can also set other OpenType features, like setting `cv01` to `7`:
2391
2392```json
2393{
2394 "ui_font_features": {
2395 "cv01": 7
2396 }
2397}
2398```
2399
2400## UI Font Fallbacks
2401
2402- Description: The font fallbacks to use for text in the UI.
2403- Setting: `ui_font_fallbacks`
2404- Default: `null`
2405- Platform: macOS and Windows.
2406
2407**Options**
2408
2409For example, to use `Nerd Font` as a fallback, add the following to your settings:
2410
2411```json
2412{
2413 "ui_font_fallbacks": ["Nerd Font"]
2414}
2415```
2416
2417## UI Font Size
2418
2419- Description: The default font size for text in the UI.
2420- Setting: `ui_font_size`
2421- Default: `16`
2422
2423**Options**
2424
2425`integer` values from `6` to `100` pixels (inclusive)
2426
2427## UI Font Weight
2428
2429- Description: The default font weight for text in the UI.
2430- Setting: `ui_font_weight`
2431- Default: `400`
2432
2433**Options**
2434
2435`integer` values between `100` and `900`
2436
2437## An example configuration:
2438
2439```json
2440// ~/.config/zed/settings.json
2441{
2442 "theme": "cave-light",
2443 "tab_size": 2,
2444 "preferred_line_length": 80,
2445 "soft_wrap": "none",
2446
2447 "buffer_font_size": 18,
2448 "buffer_font_family": "Zed Plex Mono",
2449
2450 "autosave": "on_focus_change",
2451 "format_on_save": "off",
2452 "vim_mode": false,
2453 "projects_online_by_default": true,
2454 "terminal": {
2455 "font_family": "FiraCode Nerd Font Mono",
2456 "blinking": "off"
2457 },
2458 "languages": {
2459 "C": {
2460 "format_on_save": "language_server",
2461 "preferred_line_length": 64,
2462 "soft_wrap": "preferred_line_length"
2463 }
2464 }
2465}
2466```