File size: 9,669 Bytes
3e05655 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 | ---
title: 主題
description: 選擇內建主題或定義您自己的主題。
---
透過 OpenCode,您可以從多個內建主題中進行選擇,使用能自動適配終端機主題的主題,或者定義您自己的自訂主題。
預設情況下,OpenCode 使用我們自己的 `opencode` 主題。
---
## 終端機要求
為了使主題能夠正確顯示完整的調色盤,您的終端機必須支援**真彩色**(24 位元色)。大多數現代終端機預設支援此功能,但您可能需要手動啟用:
- **檢查支援情況**:執行 `echo $COLORTERM` — 輸出應為 `truecolor` 或 `24bit`
- **啟用真彩色**:在您的 shell 設定檔中設定環境變數 `COLORTERM=truecolor`
- **終端機相容性**:確保您的終端機模擬器支援 24 位元色(大多數現代終端機如 iTerm2、Alacritty、Kitty、Windows Terminal 以及較新版本的 GNOME Terminal 均已支援)
如果沒有真彩色支援,主題可能會出現色彩精度下降的情況,或者回退到最接近的 256 色近似值。
---
## 內建主題
OpenCode 自帶多個內建主題。
| 名稱 | 描述 |
| ---------------------- | ------------------------------------------------------------------- |
| `system` | 自動適配終端機的背景顏色 |
| `tokyonight` | 基於 [Tokyonight](https://github.com/folke/tokyonight.nvim) 主題 |
| `everforest` | 基於 [Everforest](https://github.com/sainnhe/everforest) 主題 |
| `ayu` | 基於 [Ayu](https://github.com/ayu-theme) 暗色主題 |
| `catppuccin` | 基於 [Catppuccin](https://github.com/catppuccin) 主題 |
| `catppuccin-macchiato` | 基於 [Catppuccin](https://github.com/catppuccin) 主題 |
| `gruvbox` | 基於 [Gruvbox](https://github.com/morhetz/gruvbox) 主題 |
| `kanagawa` | 基於 [Kanagawa](https://github.com/rebelot/kanagawa.nvim) 主題 |
| `nord` | 基於 [Nord](https://github.com/nordtheme/nord) 主題 |
| `matrix` | 駭客風格的黑底綠字主題 |
| `one-dark` | 基於 [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark 主題 |
我們還在不斷新增更多主題。
---
## 系統主題
`system` 主題旨在自動適配您終端機的配色方案。與使用固定顏色的傳統主題不同,_system_ 主題具有以下特點:
- **產生灰階色階**:根據終端機的背景顏色建立自訂灰階色階,確保最佳對比度。
- **使用 ANSI 顏色**:利用標準 ANSI 顏色(0-15)進行語法高亮和 UI 元素渲染,遵循終端機的調色盤設定。
- **保留終端機預設值**:將文字和背景顏色設為 `none`,以保持終端機的原生外觀。
系統主題適合以下使用者:
- 希望 OpenCode 與終端機的外觀保持一致
- 使用了自訂終端機配色方案
- 偏好所有終端機應用程式擁有統一的視覺風格
---
## 使用主題
您可以透過 `/theme` 指令調出主題選擇介面來選擇主題,也可以在 `tui.json` 中直接指定。
```json title="tui.json" {3}
{
"$schema": "https://opencode.ai/tui.json",
"theme": "tokyonight"
}
```
---
## 自訂主題
OpenCode 支援靈活的基於 JSON 的主題系統,讓使用者可以輕鬆建立和自訂主題。
---
### 層級優先順序
主題按以下順序從多個目錄載入,後面的目錄會覆蓋前面的目錄:
1. **內建主題** — 嵌入在二進位檔案中
2. **使用者設定目錄** — 定義在 `~/.config/opencode/themes/*.json` 或 `$XDG_CONFIG_HOME/opencode/themes/*.json`
3. **專案根目錄** — 定義在 `<project-root>/.opencode/themes/*.json`
4. **當前工作目錄** — 定義在 `./.opencode/themes/*.json`
如果多個目錄包含同名主題,將使用優先順序較高的目錄中的主題。
---
### 建立主題
要建立自訂主題,請在上述任一主題目錄中建立一個 JSON 檔案。
建立使用者級主題:
```bash no-frame
mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json
```
建立專案級主題:
```bash no-frame
mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json
```
---
### JSON 格式
主題使用靈活的 JSON 格式,支援以下特性:
- **十六進位顏色**:`"#ffffff"`
- **ANSI 顏色**:`3`(0-255)
- **顏色參考**:`"primary"` 或自訂定義的顏色名
- **深色/淺色變體**:`{"dark": "#000", "light": "#fff"}`
- **無顏色**:`"none"` — 使用終端機的預設顏色或透明背景
---
### 顏色定義
`defs` 部分是選填的,它允許您定義可在主題中重複引用的可重複使用顏色。
---
### 終端機預設值
特殊值 `"none"` 可用於任何顏色屬性,以繼承終端機的預設顏色。這在建立需要與終端機配色方案無縫融合的主題時特別有用:
- `"text": "none"` — 使用終端機的預設前景色
- `"background": "none"` — 使用終端機的預設背景色
---
### 範例
以下是一個自訂主題的完整範例:
```json title="my-theme.json"
{
"$schema": "https://opencode.ai/theme.json",
"defs": {
"nord0": "#2E3440",
"nord1": "#3B4252",
"nord2": "#434C5E",
"nord3": "#4C566A",
"nord4": "#D8DEE9",
"nord5": "#E5E9F0",
"nord6": "#ECEFF4",
"nord7": "#8FBCBB",
"nord8": "#88C0D0",
"nord9": "#81A1C1",
"nord10": "#5E81AC",
"nord11": "#BF616A",
"nord12": "#D08770",
"nord13": "#EBCB8B",
"nord14": "#A3BE8C",
"nord15": "#B48EAD"
},
"theme": {
"primary": {
"dark": "nord8",
"light": "nord10"
},
"secondary": {
"dark": "nord9",
"light": "nord9"
},
"accent": {
"dark": "nord7",
"light": "nord7"
},
"error": {
"dark": "nord11",
"light": "nord11"
},
"warning": {
"dark": "nord12",
"light": "nord12"
},
"success": {
"dark": "nord14",
"light": "nord14"
},
"info": {
"dark": "nord8",
"light": "nord10"
},
"text": {
"dark": "nord4",
"light": "nord0"
},
"textMuted": {
"dark": "nord3",
"light": "nord1"
},
"background": {
"dark": "nord0",
"light": "nord6"
},
"backgroundPanel": {
"dark": "nord1",
"light": "nord5"
},
"backgroundElement": {
"dark": "nord1",
"light": "nord4"
},
"border": {
"dark": "nord2",
"light": "nord3"
},
"borderActive": {
"dark": "nord3",
"light": "nord2"
},
"borderSubtle": {
"dark": "nord2",
"light": "nord3"
},
"diffAdded": {
"dark": "nord14",
"light": "nord14"
},
"diffRemoved": {
"dark": "nord11",
"light": "nord11"
},
"diffContext": {
"dark": "nord3",
"light": "nord3"
},
"diffHunkHeader": {
"dark": "nord3",
"light": "nord3"
},
"diffHighlightAdded": {
"dark": "nord14",
"light": "nord14"
},
"diffHighlightRemoved": {
"dark": "nord11",
"light": "nord11"
},
"diffAddedBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffRemovedBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffContextBg": {
"dark": "nord1",
"light": "nord5"
},
"diffLineNumber": {
"dark": "nord2",
"light": "nord4"
},
"diffAddedLineNumberBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffRemovedLineNumberBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"markdownText": {
"dark": "nord4",
"light": "nord0"
},
"markdownHeading": {
"dark": "nord8",
"light": "nord10"
},
"markdownLink": {
"dark": "nord9",
"light": "nord9"
},
"markdownLinkText": {
"dark": "nord7",
"light": "nord7"
},
"markdownCode": {
"dark": "nord14",
"light": "nord14"
},
"markdownBlockQuote": {
"dark": "nord3",
"light": "nord3"
},
"markdownEmph": {
"dark": "nord12",
"light": "nord12"
},
"markdownStrong": {
"dark": "nord13",
"light": "nord13"
},
"markdownHorizontalRule": {
"dark": "nord3",
"light": "nord3"
},
"markdownListItem": {
"dark": "nord8",
"light": "nord10"
},
"markdownListEnumeration": {
"dark": "nord7",
"light": "nord7"
},
"markdownImage": {
"dark": "nord9",
"light": "nord9"
},
"markdownImageText": {
"dark": "nord7",
"light": "nord7"
},
"markdownCodeBlock": {
"dark": "nord4",
"light": "nord0"
},
"syntaxComment": {
"dark": "nord3",
"light": "nord3"
},
"syntaxKeyword": {
"dark": "nord9",
"light": "nord9"
},
"syntaxFunction": {
"dark": "nord8",
"light": "nord8"
},
"syntaxVariable": {
"dark": "nord7",
"light": "nord7"
},
"syntaxString": {
"dark": "nord14",
"light": "nord14"
},
"syntaxNumber": {
"dark": "nord15",
"light": "nord15"
},
"syntaxType": {
"dark": "nord7",
"light": "nord7"
},
"syntaxOperator": {
"dark": "nord9",
"light": "nord9"
},
"syntaxPunctuation": {
"dark": "nord4",
"light": "nord0"
}
}
}
```
|