状态栏与输出样式:定制你的终端信息面板
为什么要折腾这两样
默认界面能用,但"能用"和"顺手"之间差着一个定制层。状态栏(status line)解决信息获取:上下文用了多少、当前分支、本次会话花了几毛钱——这些你原来要敲命令才知道的事,变成常驻屏幕的一行。输出样式(output style)解决交互风格:让 Claude 话少一点、解释多一点、还是主动一点——一次性设定,全会话生效,不用每条消息重复交代。
这两样都是低投入高回报的定制,加起来花二十分钟,日常体验提升立竿见影。
状态栏:一行脚本的事
状态栏的原理简单得感人:Claude Code 把会话数据以 JSON 从 stdin 喂给你指定的 shell 命令,命令打印什么,屏幕底部就显示什么。它跑在本地、不耗 API token。
懒人路径——用自然语言让 Claude 自己配:
/statusline 显示模型名、目录、git 分支和上下文百分比进度条
它会生成脚本写进 ~/.claude/ 并自动更新配置,你只需要批准文件编辑。想删掉就 /statusline clear。
手动路径——理解原理后自己写。三步:
# 1. 写脚本 ~/.claude/statusline.sh
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
echo "[$MODEL] ${DIR##*/} | ${PCT}% context"
# 2. 加执行权限
chmod +x ~/.claude/statusline.sh
// 3. 写进 ~/.claude/settings.json
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}
保存即生效(配置热加载)。stdin 里的 JSON 字段很丰富:模型信息、工作目录、上下文窗口用量、成本、时长、git 状态、Vim 模式等,完整字段表见官方状态栏文档。
状态栏进阶技巧
知道这四件事,你的状态栏能从"能用"变"好用":
- 多行显示:脚本多 echo 几行就行。经典布局:第一行模型+目录+分支,第二行上下文进度条+成本+时长;
- ANSI 颜色:
\033[32m绿色、\033[31m红色——上下文超过 70% 变黄、90% 变红,比数字直观十倍; - 定时刷新:默认只在事件(新消息、压缩、模式切换)时更新;想让时钟类信息持续走,加
"refreshInterval": N(秒); - 可点击链接:用 OSC 8 转义序列,iTerm2/Kitty/WezTerm 里 Cmd/Ctrl+点击直达。
配置字段还有 padding(水平留白)和 hideVimModeIndicator(自己渲染 Vim 模式时防重复显示)。注意脚本里读终端宽度要用 COLUMNS 环境变量而不是 tput cols——输出是被捕获后再渲染的。
stdin 里到底有什么
脚本可读的字段相当全,挑常用的列一张速查表(完整清单见官方文档):
| 字段 | 内容 |
|---|---|
.model.display_name |
当前模型名 |
.workspace.current_dir |
当前工作目录 |
.context_window.used_percentage |
上下文已用百分比 |
.cost 相关字段 |
会话成本 |
.session_id |
会话 ID(多会话时区分用) |
.vim.mode |
Vim 编辑模式状态 |
| 限流窗口字段 | 套餐用量的窗口与重置时间 |
这些字段一组合,就能拼出任何你想要的信息面板。两个进阶示例思路:告警型——上下文百分比超阈值时输出红色警告文字,逼你在压缩前主动 /compact;多会话型——并行开多个会话时在状态栏带上会话名(读取 .session_id 或自定义名),一眼分清哪个终端在干哪个任务。
一个让我离不开的组合配置
分享我自己用了一年多的配置思路,作为收尾参考:状态栏两行——第一行显示模型、目录、分支(git branch --show-current 拿到),第二行是上下文进度条,用 ASCII 字符拼出 [████████░░] 78%,70% 以上染黄、90% 染红。输出样式默认 Concise,赶工看结果;读陌生代码库时临时切 Explanatory 看 Insight。
这套组合解决的三件事:不再手动 /context(水位常驻眼前)、不再忘记自己在哪个分支(多任务切换时尤其致命)、不再被冗长回复打断节奏。总配置时间不到半小时,包括调脚本的那几次失败。
如果你是 tmux 用户,还可以在 tmux 状态栏里再放一份极简版信息(模型+上下文百分比),多个 Claude 会话并行时全局可见——状态栏数据格式是公开 JSON,任何宿主环境都能消费。
输出样式:调 Claude 的"性格"
输出样式控制每次回复的角色、语气和格式。内置五个,各有明确场景:
| 样式 | 行为变化 | 适合 |
|---|---|---|
| Default | 标准工程任务指令(即无样式) | 默认 |
| Proactive | 直接开工,常规决策自己拍板不问 | 你愿意事后纠偏的节奏 |
| Concise | 先给结论,砍掉铺垫、过程旁白和结尾复述 | 嫌回复啰嗦的人 |
| Explanatory | 附带 Insight 小块解释代码选择的原因 |
熟悉新代码库时 |
| Learning | 解释之外还留几行 TODO(human) 让你亲手写 |
边做边学练手 |
切换方式:/output-style concise,或 /config 菜单选 Output style。选择默认保存在项目的 settings.local.json;想全局生效就把 outputStyle 写进用户级 settings.json(注意大小写敏感,explanatory 会被当无效值退回 Default)。
值得澄清两个边界:样式改变的是 Claude 的沟通方式,不改变权限模式——Proactive 样式下该弹的权限窗照弹,这是设计好的安全分离。样式也是"指令"而非"强制"——必须每次发生的事(如每次编辑后格式化)要用 hook,不是样式。
写一个自定义输出样式
样式就是一个 md 文件。放 ~/.claude/output-styles/(个人全局)或项目 .claude/output-styles/(团队共享),文件名即样式名。关键决策是 frontmatter 的 keep-coding-instructions:true 保留 Claude Code 的工程指令(只改沟通方式),省略则完全自定义角色(可以让它变成写作助手、数据分析师)。
---
name: 先画图
description: 解释代码和架构时先用 Mermaid 图再讲文字
keep-coding-instructions: true
---
解释代码、架构或数据流时,先给一个 Mermaid 图展示结构,
再展开文字说明。
## 图表约定
- 控制流用 flowchart TD
- 请求路径用 sequenceDiagram
- 节点数控制在 15 个以内
之后 /output-style 先画图 即可启用。配上本系列前面讲的 Concise 风格和 Learning 模式,你可以按"赶工日 / 学习日 / 摸索陌生库"切换不同的 Claude 性格——输出样式就是把"prompt 里反复交代的事"固化成开关。
定制做完这两样,你的终端就有了专属信息面板和专属交互风格。至此第三部分的定制手段全部讲完:settings 管全局、hooks 管确定性、skills 管流程、子代理管分工、MCP 管外部、插件管打包、样式和状态栏管体验——下一部分进入多代理与工程化的深水区。
本章由 WorkBuddy 原创整理,事实性内容参考 Claude Code 官方文档。
