Skip to content

5.6a 主题系统

50+ 内置主题随意切换,还能自定义每一个颜色。

📝 课程笔记

本课核心知识点整理:

主题系统学霸笔记

学完你能做什么

  • 切换和设置主题
  • 理解主题加载优先级
  • 创建自定义主题
  • 配置 TUI 滚动和 Diff 样式

终端要求

主题需要终端支持 truecolor(24位色):

bash
# 检查支持
echo $COLORTERM  # 应输出 truecolor 或 24bit

# 如不支持,添加到 shell 配置
export COLORTERM=truecolor

兼容性说明

  • 支持:iTerm2、Alacritty、Kitty、Windows Terminal、GNOME Terminal(新版)
  • 不支持 truecolor 时,主题会降级到 256 色近似

切换主题

/theme

或使用快捷键:Ctrl+XT


内置主题

OpenCode 内置 32 个主题:

主题风格来源
opencode默认主题,橙色调OpenCode 原创
system自适应终端配色特殊
tokyonight暗色,蓝紫调tokyonight.nvim
catppuccin暗色,柔和粉调Catppuccin
catppuccin-macchiato暗色,Macchiato 变体Catppuccin
catppuccin-frappe暗色,Frappe 变体Catppuccin
gruvbox暗色,复古暖调Gruvbox
nord暗色,北欧冷调Nord
everforest暗色,自然绿Everforest
ayu暗色,Ayu 风格Ayu
kanagawa暗色,日式水墨Kanagawa
one-dark暗色,Atom 风格Atom One
dracula暗色,紫色调Dracula
matrix黑客风格绿经典
monokai暗色,经典 MonokaiMonokai
material暗色,Material DesignMaterial
solarized暗色/亮色,SolarizedSolarized
palenight暗色,紫蓝调Palenight
nightowl暗色,适合夜间Night Owl
rosepine暗色,玫瑰调Rose Pine
synthwave84复古霓虹风Synthwave '84
cobalt2暗色,钴蓝调Cobalt2
githubGitHub 风格GitHub
vercel暗色,Vercel 风格Vercel
cursor暗色,Cursor 风格Cursor
vesper暗色,柔和Vesper
aura暗色,紫色调Aura
flexoki暗色,柔和墨水调Flexoki
zenburn暗色,低对比度护眼Zenburn
mercury暗色,银灰调Mercury
orng暗色,橙色调OpenCode
lucent-orng暗色,明亮橙色调OpenCode
osaka-jade暗色,翡翠绿调OpenCode

输入 /theme 可实时预览所有主题效果。


System 主题

system 是特殊主题,自动适配终端配色:

  • 自动生成灰度:根据终端背景色生成最佳对比度的灰度
  • 使用 ANSI 颜色:使用标准 ANSI 颜色(0-15),跟随终端配色
  • 保留终端默认:文字和背景使用 none,保持终端原生外观

适合人群

  • 希望 OpenCode 匹配终端外观的用户
  • 使用自定义终端配色方案的用户
  • 追求所有终端程序风格统一的用户
jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "theme": "system"
}

配置默认主题

jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "theme": "tokyonight"
}

注意:配置键是 theme,不是 tui.theme


自定义主题

主题加载顺序

优先级从低到高(后加载的覆盖前面的):

  1. 内置主题 - 嵌入二进制文件中
  2. 用户配置目录 - ~/.config/opencode/themes/*.json$XDG_CONFIG_HOME/opencode/themes/*.json
  3. 项目根目录 - <project-root>/.opencode/themes/*.json
  4. 当前工作目录 - ./.opencode/themes/*.json

同名主题会被覆盖。例如创建 ~/.config/opencode/themes/tokyonight.json 可以覆盖内置的 tokyonight 主题。

创建主题

用户全局主题

bash
mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json

项目专属主题

bash
mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json

主题 JSON 格式

jsonc
{
  "$schema": "https://opencode.ai/theme.json",
  "defs": {
    // 颜色定义(可选),用于复用
    "bg": "#1a1b26",
    "fg": "#c0caf5",
    "blue": "#7aa2f7",
    "green": "#9ece6a",
    "red": "#f7768e"
  },
  "theme": {
    // 必须定义的颜色属性
    "primary": { "dark": "blue", "light": "#3b7dd8" },
    "text": { "dark": "fg", "light": "#1a1a1a" },
    "background": { "dark": "bg", "light": "#ffffff" }
    // ... 其他属性
  }
}

颜色格式

格式示例说明
Hex"#ffffff"标准十六进制颜色
ANSI30-255 ANSI 颜色码
引用"primary"引用 defs 中定义的颜色
明暗变体{"dark": "#000", "light": "#fff"}深色/浅色模式分别设置
无色"none"使用终端默认色(透明)

完整主题属性

主题包含以下颜色属性(均需提供 dark/light 变体):

基础颜色

属性说明
primary主色调,用于强调元素
secondary次要色调
accent点缀色
error错误提示色
warning警告提示色
success成功提示色
info信息提示色

文字与背景

属性说明
text主文字颜色
textMuted次要/灰色文字
background主背景色
backgroundPanel面板背景色
backgroundElement元素背景色

边框

属性说明
border普通边框
borderActive激活状态边框
borderSubtle柔和边框

Diff 视图

属性说明
diffAdded新增行文字色
diffRemoved删除行文字色
diffContext上下文行文字色
diffHunkHeaderHunk 头部文字色
diffHighlightAdded新增高亮
diffHighlightRemoved删除高亮
diffAddedBg新增行背景
diffRemovedBg删除行背景
diffContextBg上下文背景
diffLineNumber行号颜色
diffAddedLineNumberBg新增行号背景
diffRemovedLineNumberBg删除行号背景

Markdown 渲染

属性说明
markdownText正文
markdownHeading标题
markdownLink链接 URL
markdownLinkText链接文字
markdownCode行内代码
markdownBlockQuote引用块
markdownEmph斜体
markdownStrong粗体
markdownHorizontalRule水平线
markdownListItem列表标记
markdownListEnumeration有序列表数字
markdownImage图片链接
markdownImageText图片说明
markdownCodeBlock代码块文字

语法高亮

属性说明
syntaxComment注释
syntaxKeyword关键字
syntaxFunction函数名
syntaxVariable变量名
syntaxString字符串
syntaxNumber数字
syntaxType类型
syntaxOperator操作符
syntaxPunctuation标点

完整示例

以 Nord 主题为例:

jsonc
{
  "$schema": "https://opencode.ai/theme.json",
  "defs": {
    "nord0": "#2E3440",
    "nord1": "#3B4252",
    "nord4": "#D8DEE9",
    "nord8": "#88C0D0",
    "nord11": "#BF616A",
    "nord14": "#A3BE8C"
  },
  "theme": {
    "primary": { "dark": "nord8", "light": "#5E81AC" },
    "secondary": { "dark": "#81A1C1", "light": "#81A1C1" },
    "error": { "dark": "nord11", "light": "nord11" },
    "success": { "dark": "nord14", "light": "nord14" },
    "text": { "dark": "nord4", "light": "nord0" },
    "background": { "dark": "nord0", "light": "#ECEFF4" },
    "diffAdded": { "dark": "nord14", "light": "nord14" },
    "diffRemoved": { "dark": "nord11", "light": "nord11" },
    "syntaxKeyword": { "dark": "#81A1C1", "light": "#81A1C1" },
    "syntaxString": { "dark": "nord14", "light": "nord14" }
    // ... 其他属性
  }
}

TUI 配置

除了主题颜色,还可以配置 TUI 行为:

jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "tui": {
    // 滚动速度(最小 0.001,默认 Unix 为 1,Windows 为 3)
    "scroll_speed": 3,
    
    // 滚动加速度(启用后覆盖 scroll_speed)
    "scroll_acceleration": {
      "enabled": true
    },
    
    // Diff 渲染样式
    // "auto": 根据终端宽度自适应
    // "stacked": 始终单列显示
    "diff_style": "auto"
  }
}

参数说明

参数类型默认值说明
scroll_speednumber1 (Unix) / 3 (Windows)滚动速度,最小 0.001
scroll_acceleration.enabledbooleanfalse启用 macOS 风格滚动加速
diff_style"auto" | "stacked""auto"Diff 渲染样式

注意:启用 scroll_acceleration 后,scroll_speed 设置将被忽略。


编辑器设置

OpenCode 支持打开外部编辑器编辑长文本:

bash
# 设置编辑器(添加到 ~/.zshrc 或 ~/.bashrc)
export EDITOR="code --wait"  # VS Code
export EDITOR="cursor --wait" # Cursor
export EDITOR="vim"          # Vim
export EDITOR="nano"         # Nano

在 OpenCode 中使用:

/editor

或快捷键:Ctrl+XE

注意:GUI 编辑器(VS Code、Cursor 等)需要 --wait 参数,让 OpenCode 等待编辑器关闭。


踩坑提醒

现象原因解决
颜色显示不对/降级终端不支持 truecolor设置 COLORTERM=truecolor
/themes 命令不存在命令名错了使用 /theme(无 s)
主题配置不生效用了 tui.theme应直接用 theme
自定义主题没加载路径不对确认放在 .opencode/themes/~/.config/opencode/themes/
编辑器打不开EDITOR 变量不对确认编辑器命令可用,GUI 编辑器加 --wait
滚动太快/太慢默认速度不合适调整 tui.scroll_speed 或启用加速

本课小结

你学会了:

  1. 使用 /theme 切换 32+ 内置主题
  2. 理解 system 主题的自适应机制
  3. 在配置中设置 theme 指定默认主题
  4. 创建自定义主题 JSON 文件
  5. 配置 TUI 滚动和 Diff 样式
  6. 设置外部编辑器

下一课预告

下一课我们将学习快捷键定制。

5.6b 快捷键