|
| 1 | +--- |
| 2 | +title: Recommended Zed setting.json |
| 3 | +date: 2025-12-15 |
| 4 | +category: IDE |
| 5 | +description: I share my minimal recommended settings for Zed's setting.json |
| 6 | +tags: [zed, ai] |
| 7 | +recommended: true |
| 8 | +thumbnail: assets/img/zed_icon.png |
| 9 | +--- |
| 10 | + |
| 11 | +Hello! I'm Pan-kun. |
| 12 | + |
| 13 | +This time I'll describe my recommended settings for `setting.json`, which affects all workflows in the Zed editor. |
| 14 | + |
| 15 | +## Introduction |
| 16 | + |
| 17 | +I'll briefly explain how to configure `settings.json`. If you've used VS Code before, most of this will be familiar, but I'll cover it just in case. |
| 18 | + |
| 19 | +### What is `settings.json`? |
| 20 | + |
| 21 | +It's a file that defines editor behavior. You can customize themes, fonts, IDE layout, UI, extensions, and many more settings. |
| 22 | +Note: there are other configuration files such as `keymaps.json` for key bindings. |
| 23 | + |
| 24 | +### How to open the settings |
| 25 | + |
| 26 | +Open the command palette with [Ctrl + Shift + P] and type `Zed: setting`. A popup like the one in the attached image will appear. |
| 27 | + |
| 28 | + |
| 29 | + |
| 30 | +### Types of settings |
| 31 | + |
| 32 | +Items that end with "settings" can be configured via the settings UI. |
| 33 | +Items that end with "settings file" are configurable inside the `settings.json` script. (Refer to the documentation for property details.) |
| 34 | + |
| 35 | +### Scope of settings |
| 36 | + |
| 37 | +Listed below in increasing order of priority. Settings defined later override earlier ones. |
| 38 | + |
| 39 | +- Default — settings applied by Zed by default |
| 40 | +- account — settings likely tied to your Zed or GitHub account |
| 41 | +- project — settings applied per-project |
| 42 | + |
| 43 | +### Basic syntax |
| 44 | + |
| 45 | +In general, as long as you follow the JSON structure below and set valid property names and values, you're fine: |
| 46 | + |
| 47 | +```json |
| 48 | +{ |
| 49 | + "propertyName": value, |
| 50 | + "A": { |
| 51 | + "B": "val", |
| 52 | + "C": true |
| 53 | + }, |
| 54 | + "Array": ["S","A","M","P","L","E"] |
| 55 | +} |
| 56 | +``` |
| 57 | + |
| 58 | +Refer to the list of properties you can set in `settings.json` here: |
| 59 | +https://zed.dev/docs/configuring-zed |
| 60 | +And see `keymap.json` docs here: |
| 61 | +https://zed.dev/docs/key-bindings |
| 62 | + |
| 63 | +## Recommended settings |
| 64 | + |
| 65 | +Of course these are recommendations — your ideal setup depends on your environment, projects, and personal preferences. Below is a short list of the settings I'd like to highlight first. |
| 66 | + |
| 67 | +| Property | Value | Description | |
| 68 | +| :--- | :--- | :--- | |
| 69 | +| colorize_brackets | true | Colorizes matching bracket pairs | |
| 70 | +| agent.default_model.provider | copilot_chat | Default LLM provider | |
| 71 | +| agent.default_model.model | gpt-5-mini | Any model usable with copilot_chat | |
| 72 | +| agent.default_profile | ask | Disables automatic code rewrite permission | |
| 73 | +| inlay_hints | true | Renders inlay hint texts | |
| 74 | +| lsp.omnisharp.initialization_options.AnalyzeOpenDocumentsOnly | true | Analyze only open files | |
| 75 | +| lsp.omnisharp.initialization_options.EnableRoslynAnalyzers | true | Use Roslyn analyzers (set false for very large codebases) | |
| 76 | +| lsp.omnisharp.initialization_options.EnableImportCompletion | true | Auto-insert `using` statements | |
| 77 | +| languages.CSharp.language_servers | ["omnisharp"] | Language server for C# | |
| 78 | +| languages.CSharp.format_on_save | "on" | Format on save | |
| 79 | +| languages.CSharp.tab_size | 4 | Spaces per tab | |
| 80 | +| languages.CSharp.preferred_line_length | 120 | Preferred max line length | |
| 81 | + |
| 82 | +Some settings are nested deeply; as you can see, this article focuses mainly on C# users. If you want settings for C++ instead, add `clangd` under `lsp` and mirror similar `languages` settings for C/C++. You can configure each language independently. |
| 83 | + |
| 84 | +Below is the full `settings.json` I use (in fact about half of this remains close to the defaults): |
| 85 | + |
| 86 | +````json |
| 87 | +{ |
| 88 | + "colorize_brackets": true, |
| 89 | + "context_servers": {}, |
| 90 | + "agent": { |
| 91 | + "inline_assistant_model": { |
| 92 | + "provider": "copilot_chat", |
| 93 | + "model": "gpt-5-mini" |
| 94 | + }, |
| 95 | + "dock": "right", |
| 96 | + "always_allow_tool_actions": true, |
| 97 | + "default_profile": "write", |
| 98 | + "default_model": { |
| 99 | + "provider": "copilot_chat", |
| 100 | + "model": "gpt-5-mini" |
| 101 | + }, |
| 102 | + "model_parameters": [] |
| 103 | + }, |
| 104 | + "edit_predictions": { |
| 105 | + "disabled_globs": [], |
| 106 | + "mode": "subtle" |
| 107 | + }, |
| 108 | + "inlay_hints": { |
| 109 | + "enabled": true |
| 110 | + }, |
| 111 | + "preferred_line_length": 60, |
| 112 | + "minimap": { |
| 113 | + "max_width_columns": 60 |
| 114 | + }, |
| 115 | + "lsp": { |
| 116 | + "omnisharp": { |
| 117 | + "initialization_options": { |
| 118 | + "AnalyzeOpenDocumentsOnly": true, |
| 119 | + "EnableRoslynAnalyzers": true, |
| 120 | + "EnableImportCompletion": true |
| 121 | + } |
| 122 | + }, |
| 123 | + "clangd": { |
| 124 | + "binary": { |
| 125 | + "path": "file to path\\clang.exe", |
| 126 | + "arguments": [] |
| 127 | + } |
| 128 | + } |
| 129 | + }, |
| 130 | + "languages": { |
| 131 | + "CSharp": { |
| 132 | + "language_servers": ["omnisharp"], |
| 133 | + "format_on_save": "on", |
| 134 | + "tab_size": 4, |
| 135 | + "preferred_line_length": 120 |
| 136 | + }, |
| 137 | + "JSON": { |
| 138 | + "tab_size": 2 |
| 139 | + }, |
| 140 | + "YAML": { |
| 141 | + "tab_size": 2 |
| 142 | + } |
| 143 | + }, |
| 144 | + "hard_tabs": false, |
| 145 | + "debugger": { |
| 146 | + "dock": "right" |
| 147 | + }, |
| 148 | + "cursor_shape": "bar", |
| 149 | + "scrollbar": { |
| 150 | + "cursors": true |
| 151 | + }, |
| 152 | + "terminal": { |
| 153 | + "dock": "right", |
| 154 | + "cursor_shape": "bar", |
| 155 | + "shell": { |
| 156 | + "program": "C:\\Program Files\\Git\\bin\\bash.exe" |
| 157 | + } |
| 158 | + }, |
| 159 | + "features": { |
| 160 | + "edit_prediction_provider": "zed" |
| 161 | + }, |
| 162 | + "vim_mode": false, |
| 163 | + "base_keymap": "VSCode", |
| 164 | + "icon_theme": { |
| 165 | + "mode": "dark", |
| 166 | + "light": "Zed (Default)", |
| 167 | + "dark": "VSCode Icons for Zed (Dark Angular)" |
| 168 | + }, |
| 169 | + "ui_font_size": 14, |
| 170 | + "buffer_font_size": 12.0, |
| 171 | + "theme": { |
| 172 | + "mode": "dark", |
| 173 | + "light": "Gruvbox Light", |
| 174 | + "dark": "Gruvbox Dark" |
| 175 | + } |
| 176 | +} |
| 177 | +```` |
| 178 | +(Note: I used quadruple backticks here to avoid interfering with the outer container; in the actual `settings.json` file you would use standard triple-backtick fences.) |
| 179 | + |
| 180 | +Aside from the language server settings, I haven't heavily customized the UI — I keep a layout fairly close to the defaults. Personally I feel Zed's UI/UX is already very polished. |
| 181 | + |
| 182 | +## Conclusion |
| 183 | + |
| 184 | +`setting.json` tends to be something you add to or edit over time and then promptly forget, so I wrote this as a personal memo that may help others as well. Next time I might write about keymap/shortcut settings. |
| 185 | + |
| 186 | +Enjoy your Zed life! |
0 commit comments