状态栏与输出样式:定制你的终端信息面板

为什么要折腾这两样

默认界面能用,但"能用"和"顺手"之间差着一个定制层。状态栏(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 模式等,完整字段表见官方状态栏文档。

状态栏进阶技巧

知道这四件事,你的状态栏能从"能用"变"好用":

  1. 多行显示:脚本多 echo 几行就行。经典布局:第一行模型+目录+分支,第二行上下文进度条+成本+时长;
  2. ANSI 颜色:\033[32m 绿色、\033[31m 红色——上下文超过 70% 变黄、90% 变红,比数字直观十倍;
  3. 定时刷新:默认只在事件(新消息、压缩、模式切换)时更新;想让时钟类信息持续走,加 "refreshInterval": N(秒);
  4. 可点击链接:用 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 官方文档。