OpenCode终端界面

从命令行敲下 opencode 的那一刻,一个彩色、可交互的终端界面就会铺满屏幕。这就是 OpenCode 的 TUI(Terminal User Interface),专门为开发者在终端里跟大语言模型一起写项目而设计的。如果希望直接进入某个项目目录,只要把路径传给命令就行:

bash 复制代码
opencode /path/to/project

进入 TUI 之后,最自然的动作就是给它一句提示,比如:

plain 复制代码
Give me a quick summary of the codebase.

模型会直接在当前项目上下文中开始工作。


用 @ 引用文件

在消息里想要提及某个文件时,OpenCode 支持用 @ 符号触发模糊文件搜索。比方说想知道某个 API 文件中身份认证是怎么处理的,可以这样写:

plain 复制代码
How is auth handled in @packages/functions/src/api/index.ts?

TUI 会自动把匹配到的文件内容附加到对话里,省去了复制粘贴的麻烦。这个 @ 引用方式在对话中随时都能用,对于快速围绕某个文件提问非常顺手。


运行 Shell 命令

如果消息以 ! 开头,OpenCode 会把它当成一条 Shell 命令来执行,然后把命令的输出作为工具调用结果直接送到对话中。例如:

plain 复制代码
!ls -la

执行完毕后,ls -la 的输出就会出现在聊天里,后续的对话可以基于这些结果继续分析。利用这一特性,可以很自然地让模型帮忙解读日志、查看文件列表或运行测试。


斜杠命令:操作快车道

在 TUI 里,输入 / 再加上命令名,就能快速完成各种操作。大部分命令也绑定了键盘快捷键,默认的前导键是 ctrl+x,也就是说类似 ctrl+x c 这样的组合就是先按 ctrl+x,松开后再按 c

下面把所有可用的斜杠命令过一遍,包括它们的作用、别名和快捷键。

/connect

添加一个新的模型提供商。选择可用的提供商,并输入对应的 API 密钥。

/compact

压缩当前会话的上下文。别名是 /summarize。当对话变得太长,想要精简一下时可以使用。

快捷键:ctrl+x c

/details

切换工具执行细节的显示。开启之后能看到更详细的调用信息。

快捷键:ctrl+x d

/editor

打开外部编辑器来撰写消息。会用系统 EDITOR 环境变量里设置的编辑器。比如想用 VS Code 长长地写一段提示,比起在终端里敲要方便得多。

快捷键:ctrl+x e

/exit

退出 OpenCode。别名有 /quit/q

快捷键:ctrl+x q

/export

把当前对话导出为 Markdown 文件,并用默认编辑器打开。编辑器同样由 EDITOR 环境变量决定。

快捷键:ctrl+x x

/help

显示帮助对话框。里面可以看到各种命令和快捷键说明。

快捷键:ctrl+x h

/init

引导式设置,帮助创建或更新项目中的 AGENTS.md 文件。这份文件可以定义项目给语言模型的说明和规范。

快捷键:ctrl+x i

/models

列出当前可用的模型列表。

快捷键:ctrl+x m

/new

开启全新会话,同时清除当前对话。别名 /clear

快捷键:ctrl+x n

/redo

重做刚才被撤销的消息。只有在使用了 /undo 之后才能用这个命令。

有一点很实用:被撤销的文件改动也会一并恢复。OpenCode 内部用 Git 来管理这些文件变更,所以项目需要是一个 Git 仓库。

快捷键:ctrl+x r

/sessions

列出并切换会话。可以看成是对话历史的"存档"。别名有 /resume/continue

快捷键:ctrl+x l(注意是小写 L)

/share

分享当前会话。适合把对话记录发给同伴或者保存到云端。

快捷键:ctrl+x s

/themes

列出可用的主题,方便换个视觉风格。

快捷键:ctrl+x t

/thinking

控制在对话中是否显示模型的"思考块"(thinking/reasoning blocks)。对于支持扩展思考的模型,开启后可以看到它是如何一步步推理的。

需要留意的是:这个命令只控制思考块的显示 ,并不会开启或关闭模型本身的推理能力。要切换实际的推理功能,得用 ctrl+t 在模型变体之间循环。

快捷键:无额外快捷键列在这里,但可以通过命令面板调用。

/undo

撤销上一条消息。会删掉最近的用户消息以及模型后续的全部回答,同时也会回滚因此产生的所有文件改动。

/redo 一样,底层依赖 Git 实现,所以要求项目是 Git 仓库。

快捷键:ctrl+x u

/unshare

取消当前会话的分享状态。

没有公开的默认快捷键,可以在命令面板里找到。


外部编辑器设置

前文提到的 /editor/export 命令都会用到系统环境变量 EDITOR 里指定的编辑器。在 Linux 或 macOS 上,可以这样设置:

bash 复制代码
export EDITOR=nano
export EDITOR=vim
# 如果喜欢图形界面编辑器,像 VS Code 需要加上 --wait 参数
export EDITOR="code --wait"

为了让设置长期生效,建议把这一行写入 shell 配置文件(例如 ~/.bashrc~/.zshrc)。

常见的编辑器选项如下:

  • code ------ Visual Studio Code
  • cursor ------ Cursor
  • windsurf ------ Windsurf
  • nvim ------ Neovim
  • vim ------ Vim
  • nano ------ Nano
  • notepad ------ Windows 记事本
  • subl ------ Sublime Text

这里有一个细节:对于 VS Code 这类图形编辑器,需要加上 --wait 标志。这是因为 OpenCode 发送一条消息后,会等待编辑器进程结束才将内容送入对话。--wait 的作用就是让编辑器进程保持阻塞,直到使用者关闭编辑文件,这样 OpenCode 才能知道编辑完成了。不加这个参数的话,TUI 几乎会在瞬间继续运行,导致编辑内容丢失。


用 tui.json 定制界面

TUI 的外观和行为可以通过 tui.json(也支持带注释的 tui.jsonc)来配置。注意这个文件和运行时配置 opencode.json 是不同的,它专管界面侧。

一个完整的示例长这样:

json 复制代码
{
  "$schema": "https://opencode.ai/tui.json",
  "theme": "opencode",
  "keybinds": {
    "leader": "ctrl+x"
  },
  "scroll_speed": 3,
  "scroll_acceleration": {
    "enabled": true
  },
  "diff_style": "auto",
  "mouse": true
}

下面逐一看每个配置项的含义:

  • theme :设置 UI 主题。通过 /themes 可以查看所有可用主题的名字。
  • keybinds :自定义键盘快捷键,比如可以改掉 leader 键,让习惯用 ctrl+a 的用户也能顺手操作。
  • scroll_speed :控制 TUI 滚动的速度,最小值可设为 0.001,默认是 3
  • scroll_acceleration.enabled :启用类似 macOS 的滚动加速。开启后,快速的滚动手势会让滚动速度更快,而慢速操作则更精确。当此项设为 true 时, scroll_speed** 会被忽略**,因为加速逻辑会接管。
  • diff_style :控制版本差异(diff)的渲染方式。"auto" 会根据终端宽度自动选择布局,"stacked" 则会固定显示为单列式。
  • mouse :是否在 TUI 中启用鼠标捕获。默认是 true,即鼠标可以用来点击和滚动;如果设为 false,鼠标会回归终端原本的选择与滚动行为,相当于把控制权交还给终端自身。

如果希望通过环境变量指定自定义的 TUI 配置文件路径,可以设置 OPENCODE_TUI_CONFIG


隐藏用户名

还有一个容易被忽略的细节是用户名显示。在聊天消息中,默认会显示当前操作系统的用户名。如果不希望它出现,可以通过命令面板来关掉:打开 /help 或者按 ctrl+x h,然后在里面搜索 "username" 或 "hide username" 就能找到对应的开关。这个设置会自动持久化,下次再打开 OpenCode TUI 时依然保持关闭状态。

整体上看,OpenCode 的 TUI 把命令行、文件引用、模型对话和 Git 管理揉在了一起,很多操作都遵循 "少即是多" 的原则,通过简洁的语法和快捷键就能完成复杂工作流。这些能力组合起来,让直接在终端里写代码、改设计、做重构这件事情变得更流畅了。

相关推荐
m0_676544382 小时前
MySQL数据库迁移后如何测试数据可读性_进行简单查询验证.txt
jvm·数据库·python
weixin_458580122 小时前
C#怎么实现定时任务 C#如何用Timer和Quartz.NET创建定时执行的后台任务【技巧】
jvm·数据库·python
User_芊芊君子2 小时前
从零入门!MySQL 约束、范式设计与联合查询核心精讲
数据库·人工智能·mysql
重生之我是Java开发战士2 小时前
【MySQL】视图:简化查询、保障安全的虚拟表
数据库·mysql
qq_413502022 小时前
CSS解决浮动布局中最后一行对齐_配合伪类或容器处理
jvm·数据库·python
2301_808414382 小时前
MySQL的基础认识
数据库·mysql
djjdjdjdjjdj2 小时前
Less如何优化CSS代码注释风格_利用Less特性保持规范.txt
jvm·数据库·python
m0_602857762 小时前
mysql如何编写递归存储过程_mysql max_sp_recursion_depth设置
jvm·数据库·python
2401_846339562 小时前
CSS开发规范如何制定_以BEM命名法为基础构建规范体系
jvm·数据库·python