OpenCode 主题、界面与快捷键完全定制指南

OpenCode 的终端界面不仅功能强大,还具备极高的可定制性。从配色主题到界面布局,从快捷键到字体渲染,你可以按自己的审美和工作习惯打造独一无二的 AI 编程环境。本文将覆盖主题系统、TUI 配置和快捷键绑定的全部细节。

一、主题系统(Theme)

内置主题

OpenCode 内置了多款精心设计的终端主题,在 opencode.json 中通过 theme 字段即可切换:

{
  "theme": "tokyo-night"
}

内置主题包括但不限于:

| 主题名称 | 风格特点 |
|----------|----------|
| tokyo-night | 深色背景,紫蓝色调,现代感强 |
| dracula | 经典紫色暗色主题 |
| nord | 冷色调,蓝灰配色,简洁专业 |
| catppuccin-mocha | 柔和暖色,护眼舒适 |
| catppuccin-latte | 浅色主题,白天使用友好 |
| one-dark | Atom 经典主题风格 |
| solarized-dark | 经典护眼暗色方案 |
| solarized-light | 经典护眼亮色方案 |
| gruvbox-dark | 复古暖色暗调 |
| monokai | Sublime Text 经典配色 |
| rose-pine | 玫瑰色系,非常有格调 |

自定义主题

如果不满足于内置主题,可以在 opencode.json 中定义完全个性化的配色方案:

{
  "themes": {
    "my-custom-theme": {
      "name": "My Custom Theme",
      "colors": {
        "primary": "#7C3AED",
        "secondary": "#A78BFA",
        "background": "#0F0F1A",
        "surface": "#1A1A2E",
        "foreground": "#E2E2F0",
        "muted": "#6B7280",
        "accent": "#06B6D4",
        "error": "#EF4444",
        "warning": "#F59E0B",
        "success": "#10B981",
        "info": "#3B82F6",
        "border": "#2D2D4A",
        "selection": "#7C3AED33"
      },
      "syntax": {
        "keyword": "#C084FC",
        "string": "#34D399",
        "number": "#FBBF24",
        "comment": "#6B7280",
        "function": "#60A5FA",
        "type": "#F472B6",
        "variable": "#E2E2F0",
        "operator": "#A78BFA"
      }
    }
  },
  "theme": "my-custom-theme"
}

颜色说明

| 色值 | 用途 |
|------|------|
| primary | 主要强调色,用于按钮、选中项 |
| background | 主背景色 |
| surface | 卡片、面板背景色 |
| foreground | 正文文字颜色 |
| muted | 次要文字、提示信息 |
| accent | 链接、可点击元素 |
| error | 错误信息、删除操作 |
| warning | 警告信息 |
| success | 成功信息 |
| info | 通知、提示 |
| border | 边框、分隔线 |
| selection | 文本选中高亮 |
| syntax.* | 代码块中的语法高亮配色 |

二、TUI 界面配置

TUI(Terminal User Interface)是 OpenCode 的交互核心,其配置文件位于 ~/.config/opencode/tui.json

完整 TUI 配置

{
  "layout": {
    "chatWidth": 80,
    "maxFileWidth": 40,
    "showLineNumbers": true,
    "compact": false,
    "sidebar": {
      "position": "right",
      "defaultOpen": false
    }
  },
  "display": {
    "timestamp": true,
    "showTokenCount": true,
    "showModelName": true,
    "showAgentName": true,
    "truncateLongMessages": true,
    "maxMessageLines": 50
  },
  "chat": {
    "padding": 2,
    "scrollback": 10000,
    "autoScroll": true,
    "welcomeMessage": true,
    "userPrefix": ">",
    "assistantPrefix": "●"
  },
  "code": {
    "syntaxHighlight": true,
    "lineNumbers": true,
    "diffStyle": "unified",
    "maxPreviewLines": 30,
    "minPreviewLines": 3
  },
  "input": {
    "multiline": true,
    "history": 1000,
    "placeholder": "输入你的需求...",
    "emoji": false,
    "autocomplete": true
  },
  "notifications": {
    "sound": false,
    "desktop": true,
    "inApp": true
  }
}

关键配置详解

#### layout — 布局设置

  • chatWidth:对话区域宽度(字符数),设为 0 则自动适应终端宽度
  • maxFileWidth:文件预览面板宽度
  • showLineNumbers:代码块中显示行号
  • compact:紧凑模式,减少间距
  • sidebar.position:侧边栏位置(left / right
  • sidebar.defaultOpen:启动时是否默认打开侧边栏

#### display — 显示设置

  • timestamp:显示消息时间戳
  • showTokenCount:显示已用 Token 数
  • showModelName:显示当前模型名称
  • showAgentName:显示当前 Agent 名称

#### code — 代码展示

  • syntaxHighlight:代码语法高亮
  • diffStyle:diff 风格,可选 unified(统一格式)或 split(左右对比)
  • maxPreviewLines:代码预览最大行数

#### input — 输入区设置

  • multiline:默认多行输入模式
  • history:保存的历史消息数量

三、快捷键绑定(Keybinds)

OpenCode 的键盘快捷键完全可定制,让你按照自己的肌肉记忆定义操作方式。

opencode.json 中的快捷键配置

{
  "keybinds": {
    "submit": "Enter",
    "newline": "Alt+Enter",
    "interrupt": "Escape",
    "switchAgent": "Tab",
    "toggleSidebar": "Ctrl+B",
    "toggleFiles": "Ctrl+O",
    "clearChat": "Ctrl+L",
    "scrollUp": "Ctrl+U",
    "scrollDown": "Ctrl+D",
    "pageUp": "PageUp",
    "pageDown": "PageDown",
    "historyUp": "Up",
    "historyDown": "Down",
    "autocomplete": "Ctrl+Space",
    "focusInput": "Ctrl+I",
    "copyLastMessage": "Ctrl+Y",
    "copyLastCode": "Ctrl+Shift+C",
    "toggleTheme": "Ctrl+T"
  }
}

快捷键功能说明

| 快捷键 | 默认绑定 | 功能说明 |
|--------|----------|----------|
| submit | Enter | 发送消息 |
| newline | Alt+Enter | 输入换行 |
| interrupt | Escape | 中断 AI 当前操作 |
| switchAgent | Tab | 切换 Build / Plan Agent |
| toggleSidebar | Ctrl+B | 开关侧边栏 |
| toggleFiles | Ctrl+O | 开关文件面板 |
| clearChat | Ctrl+L | 清空对话(保留上下文) |
| scrollUp | Ctrl+U | 向上滚动半页 |
| scrollDown | Ctrl+D | 向下滚动半页 |
| pageUp | PageUp | 向上翻完整一页 |
| pageDown | PageDown | 向下翻完整一页 |
| historyUp | Up | 上一条历史消息 |
| historyDown | Down | 下一条历史消息 |
| autocomplete | Ctrl+Space | 触发自动补全 |
| focusInput | Ctrl+I | 聚焦到输入框 |
| copyLastMessage | Ctrl+Y | 复制 AI 上一条回复 |
| copyLastCode | Ctrl+Shift+C | 复制 AI 回复中的代码块 |
| toggleTheme | Ctrl+T | 快速切换主题 |

组合键语法

单键:        Enter, Escape, Tab, Space
Ctrl 组合:   Ctrl+A, Ctrl+C
Alt 组合:    Alt+Enter, Alt+Backspace
Shift 组合:  Shift+Tab
双重组合:    Ctrl+Shift+C
方向键:      Up, Down, Left, Right
功能键:      F1, F2, ..., F12

终端兼容性说明

某些终端模拟器可能拦截特定的快捷键组合。常见情况:

  • Windows Terminal:Ctrl+Shift+C 默认是复制,可在设置中修改
  • macOS Terminal:Option 键默认行为不同,建议在「设置→描述文件→键盘」中开启「将 Option 用作 Meta 键」
  • iTerm2:需要手动放开部分被占用的快捷键

四、终端字体与渲染

OpenCode 使用终端的字体设置,推荐以下编程专用字体以获得最佳体验:

| 字体 | 特点 |
|------|------|
| JetBrains Mono | 连字支持优秀,开源免费 |
| Fira Code | 经典连字字体,符号美观 |
| Cascadia Code | 微软出品,Windows Terminal 默认 |
| Iosevka | 极窄字体,信息密度高 |
| Hack | 清晰易读,稳定可靠 |
| Maple Mono | 圆角设计,中文支持好 |

在终端设置中配置字体后,OpenCode 会自动使用。

五、实战:打造一套完整主题

以下是一个完整的主题配置,可以直接复制到 opencode.json 中:

{
  "theme": "midnight-purple",
  "themes": {
    "midnight-purple": {
      "name": "Midnight Purple",
      "colors": {
        "primary": "#9D7CD8",
        "secondary": "#7C3AED",
        "background": "#1A1B26",
        "surface": "#24283B",
        "foreground": "#C0CAF5",
        "muted": "#565F89",
        "accent": "#7DCFFF",
        "error": "#F7768E",
        "warning": "#E0AF68",
        "success": "#9ECE6A",
        "info": "#7DCFFF",
        "border": "#3B4261",
        "selection": "#9D7CD840"
      },
      "syntax": {
        "keyword": "#9D7CD8",
        "string": "#9ECE6A",
        "number": "#FF9E64",
        "comment": "#565F89",
        "function": "#7AA2F7",
        "type": "#89DCEB",
        "variable": "#C0CAF5",
        "operator": "#89DCEB"
      }
    }
  }
}

小结

通过主题系统和 TUI 配置,OpenCode 的终端界面可以从一个「能用」的工具变成「爱用」的编程伙伴。配合自定义快捷键,你的操作效率将大幅提升。下一篇我们将深入 OpenCode 的 Agent 与 Sub-Agent 系统,探索多 Agent 协作的强大能力。