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