OpenCode 的终端界面不仅功能强大,还具备极高的可定制性。从配色主题到界面布局,从快捷键到字体渲染,你可以按自己的审美和工作习惯打造独一无二的 AI 编程环境。本文将覆盖主题系统、TUI 配置和快捷键绑定的全部细节。
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(Terminal User Interface)是 OpenCode 的交互核心,其配置文件位于 ~/.config/opencode/tui.json。
{
"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:保存的历史消息数量OpenCode 的键盘快捷键完全可定制,让你按照自己的肌肉记忆定义操作方式。
{
"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
某些终端模拟器可能拦截特定的快捷键组合。常见情况:
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 协作的强大能力。