news 2026/5/16 13:12:30

我给 Claude Code 加了个终端仪表盘,同事看了直接问我怎么装的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我给 Claude Code 加了个终端仪表盘,同事看了直接问我怎么装的

兄弟们,我翻车了。

上周用 Claude Code 改一个项目,改到一半突然发现——上下文早满了,后面几轮对话全是"失忆状态"在输出,质量断崖式下跌。更离谱的是,那天结束一看账单,好家伙,单日干掉了几亿的token。

我心想这不行啊,照这样付费上班下去我得玩完啊,开车还得看仪表盘呢,写代码全凭感觉这也太野了。

后来我研究了一下,发现 Claude Code 其实有个隐藏的statusline功能,能帮你搞一个终端底部的"仪表盘"——模型、目录、Git 分支、token 消耗、缓存命中率、上下文进度条,全给你摆在眼前。

配完之后我的感受就四个字:早该装了

今天手把手教你们搞定,两种方法,选一个就行,小白也能五分钟上手。

先看看效果

装完之后你的终端底部会长这样:

第一行——你在哪干活:

✦ MODEL mimo-v2.5-pro 📁 DIR ~/data1/htdocs/xxx/golang ⑂ GIT master*

第二行——这轮会话的"油耗":

◔ CTX 16% · ⚡ CACHE 78% · ↕ TOK 31.6k↑ 317↓ · ◷ TIME 9m · 🔔 TIP Review before commit ✨

第三行——上下文进度条,一眼就知道还剩多少:

ctx ▰▰▰▰▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱▱ 16% used

是不是有那味了?接下来讲怎么配。

方法一:直接抄脚本(适合爱动手的兄弟)

第一步:创建脚本文件

mkdir -p ~/.claude touch ~/.claude/statusline.sh chmod +x ~/.claude/statusline.sh

把下面的内容粘进去:

#!/usr/bin/env bash # Claude Code 自定义状态栏 # 第一行:模型 / 目录 / Git 分支 # 第二行:上下文 / 缓存 / Token / 时长 / 提醒 # 第三行:上下文进度条 set -u input="$(cat)" # ----------------------------- # 颜色定义 # ----------------------------- RESET="\033[0m" BOLD="\033[1m" DIM="\033[2m" C_TEXT="\033[38;5;230m" C_MUTED="\033[38;5;245m" C_PEACH="\033[38;5;216m" C_GREEN="\033[38;5;114m" C_MINT="\033[38;5;121m" C_BLUE="\033[38;5;117m" C_PURPLE="\033[38;5;183m" C_YELLOW="\033[38;5;221m" C_RED="\033[38;5;203m" BG="\033[48;5;236m" if [ "${NO_COLOR:-}" != "" ]; then RESET=""; BOLD=""; DIM="" C_TEXT=""; C_MUTED=""; C_PEACH=""; C_GREEN=""; C_MINT="" C_BLUE=""; C_PURPLE=""; C_YELLOW=""; C_RED=""; BG="" fi # ----------------------------- # 工具函数 # ----------------------------- jqr() { jq -r "$1" 2>/dev/null <<< "$input" } num() { local v="${1:-0}" [ -z "$v" ] || [ "$v" = "null" ] && v=0 awk -v n="$v" 'BEGIN { printf "%.0f", n + 0 }' 2>/dev/null } fmt_tokens() { local n n="$(num "${1:-0}")" awk -v n="$n" 'BEGIN { if (n >= 1000000) printf "%.1fm", n / 1000000 else if (n >= 1000) { if (n % 1000 == 0) printf "%.0fk", n / 1000 else printf "%.1fk", n / 1000 } else printf "%.0f", n }' } fmt_time() { local ms ms="$(num "${1:-0}")" awk -v ms="$ms" 'BEGIN { s = ms / 1000 if (s < 1) printf "0s" else if (s < 60) printf "%.0fs", s else if (s < 3600) printf "%.0fm", s / 60 else printf "%.1fh", s / 3600 }' } short_dir() { local dir="${1:-$PWD}" [ -n "${HOME:-}" ] && dir="${dir/#$HOME/~}" dir="$(sed -E 's#^/Users/[^/]+#~#; s#^/home/[^/]+#~#' <<< "$dir")" if [ "${#dir}" -gt 36 ]; then basename "$dir" else echo "$dir" fi } git_branch() { local dir="$1" git -C "$dir" rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "no-git" return } local b b="$(git -C "$dir" branch --show-current 2>/dev/null)" [ -z "$b" ] && b="$(git -C "$dir" rev-parse --short HEAD 2>/dev/null)" [ -z "$b" ] && b="detached" if [ -n "$(git -C "$dir" status --porcelain 2>/dev/null)" ]; then b="${b}*" fi echo "$b" } top_item() { printf "%b" "${BG} $1$2 $3${RESET}${BG} ${C_TEXT}${BOLD}$4${RESET}${BG} " } metric() { printf "%b" "$1$2 $3${RESET} ${C_TEXT}${BOLD}$4${RESET}" } bar() { local pct width filled empty color out i pct="$(num "${1:-0}")" width="${2:-30}" [ "$pct" -lt 0 ] && pct=0 [ "$pct" -gt 100 ] && pct=100 filled=$((pct * width / 100)) empty=$((width - filled)) color="$C_GREEN" [ "$pct" -ge 60 ] && color="$C_YELLOW" [ "$pct" -ge 80 ] && color="$C_RED" out="" for ((i = 0; i < filled; i++)); do out="${out}▰"; done for ((i = 0; i < empty; i++)); do out="${out}▱"; done printf "%b" "${color}${out}${RESET}" } join_dot() { local first=1 item for item in "$@"; do [ -z "$item" ] && continue if [ "$first" -eq 1 ]; then printf "%b" "$item" first=0 else printf "%b" " ${C_MUTED}·${RESET} $item" fi done } # ----------------------------- # 读取字段 # ----------------------------- model="$(jqr '.model.display_name // "Claude"')" cwd="$(jqr '.workspace.current_dir // .cwd // env.PWD')" ctx_pct="$(num "$(jqr '.context_window.used_percentage // 0' | cut -d. -f1)")" in_tok="$(num "$(jqr '.context_window.total_input_tokens // 0')")" out_tok="$(num "$(jqr '.context_window.total_output_tokens // 0')")" duration_ms="$(num "$(jqr '.cost.total_duration_ms // 0')")" # 缓存命中率估算 cache_read="$(num "$(jqr '.context_window.current_usage.cache_read_input_tokens // 0')")" cache_create="$(num "$(jqr '.context_window.current_usage.cache_creation_input_tokens // 0')")" cache_input="$(num "$(jqr '.context_window.current_usage.input_tokens // 0')")" if [ $((cache_read + cache_create + cache_input)) -gt 0 ]; then cache_pct="$(awk -v r="$cache_read" -v c="$cache_create" -v i="$cache_input" \ 'BEGIN { printf "%.0f", r / (r + c + i) * 100 }')" else cache_pct="0" fi project="$(short_dir "$cwd")" branch="$(git_branch "$cwd")" tokens="$(fmt_tokens "$in_tok")↑ $(fmt_tokens "$out_tok")↓" time_display="$(fmt_time "$duration_ms")" reminder="${CLAUDE_STATUS_REMINDER:-Review before commit ✨}" # ----------------------------- # 输出三行状态栏 # ----------------------------- line1="" line1+="$(top_item "$C_PEACH" "✦" "MODEL" "$model") " line1+="$(top_item "$C_GREEN" "📁" "DIR" "$project") " line1+="$(top_item "$C_PURPLE" "⑂" "GIT" "$branch")" ctx_item="$(metric "$C_MINT" "◔" "CTX" "${ctx_pct}%")" cache_item="$(metric "$C_YELLOW" "⚡" "CACHE" "${cache_pct}%")" tok_item="$(metric "$C_GREEN" "↕" "TOK" "$tokens")" time_item="$(metric "$C_BLUE" "◷" "TIME" "$time_display")" tip_item="$(metric "$C_PEACH" "🔔" "TIP" "$reminder")" line2="$(join_dot "$ctx_item" "$cache_item" "$tok_item" "$time_item" "$tip_item")" printf "%b\n" "$line1" printf "%b\n" "$line2" printf "%b\n" "${DIM}ctx ${RESET}$(bar "$ctx_pct" 30) ${C_MUTED}${ctx_pct}% used${RESET}"

第二步:配置 settings.json

编辑~/.claude/settings.json,加上这段:

{ "statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 0, "refreshInterval": 5 } }

refreshInterval是刷新间隔,单位秒,我设的 5 秒,你们按自己喜好调。

重启 Claude Code,搞定。

方法二:让 Claude 自己配(懒人福音,强烈推荐)

这个方法是真的爽——你连脚本都不用写。

打开 Claude Code,直接输入:

/statusline

它会自动帮你装一个默认的状态栏,默认效果就挺不错的:

但这还不够,你可以用自然语言告诉它你想要啥样的:

/statusline 基于当前状态栏,想要调整下: 1.删除用户名 2.增加显示:模型名称、token输入输出量、缓存、上下文进度条 3.调整:目录和git分支名可以分开。可以分1~2行展示 整体配色优雅好看一点

它真的能听懂人话。

不用研究文档,不用手搓脚本,不用去 GitHub 上找第三方方案。觉得哪里不满意?继续用自然语言让它改,改到你满意为止。

这不比你自己 debug 脚本强一万倍?

进阶玩法:先让 ChatGPT 出设计稿

如果你想要更好看的效果,可以先让 ChatGPT 帮你出一张 UI 设计图:

帮我设计一个好看的 Claude Code 状态栏 UI 图稿,简洁清雅好看一些:尽量不要全部拥挤在一行,可以根据功能分类规整 2~3 行

然后再让 ChatGPT 根据设计稿生成 Claude Code 的 statusline prompt,把 prompt 喂给 Claude Code 就行。

最终效果我直接上图,超喜欢的:

而且我还给上下文进度条做了不同使用率的配色——绿色安全、黄色注意、红色快满了:

这个设计是真的实用,再也不用每隔一会儿就敲命令查上下文了,扫一眼就知道。

不想要了?一键删除

/statusline delete

完事。

最后说两句

配完这个状态栏之后,我最大的感受就是:信息一直在那,但以前你看不到。

上下文快满了你不知道,token 烧了多少你没数,缓存命中率高不高你不清楚。现在全摆在终端底部了,扫一眼就心里有数,写代码思路也不会被打断。

我建议直接用方法二,让 Claude Code 帮你配,全程聊天,连终端命令都不用敲。整个过程不超过五分钟,但之后省下来的注意力和 token 费用,远超这五分钟。

Claude Code 用得越深,越觉得它不只是个聊天写代码的工具,而是一个可以被你持续改造的开发环境

你们也去试试,配出来的效果发评论区,说不定比我的还好看。

我是赛博李同学大厂写代码的,觉得有用的话,点个赞 + 转发给需要的TA,感谢支持!,我们下期再见!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 13:11:23

AI安全实战:AI供应链安全防护的实战案例

AI安全实战&#xff1a;AI供应链安全防护的实战案例 &#x1f4dd; 本章学习目标&#xff1a;本章聚焦实战应用&#xff0c;通过案例帮助读者将理论转化为实践能力。通过本章学习&#xff0c;你将全面掌握"AI安全实战&#xff1a;AI供应链安全防护的实战案例"这一核心…

作者头像 李华
网站建设 2026/5/16 13:11:10

3步学会使用Tinke:免费NDS游戏资源提取与修改终极指南

3步学会使用Tinke&#xff1a;免费NDS游戏资源提取与修改终极指南 【免费下载链接】tinke Viewer and editor for files of NDS games 项目地址: https://gitcode.com/gh_mirrors/ti/tinke 你是否曾经想过提取NDS游戏中的精美图片、动听音乐&#xff0c;或者修改游戏文本…

作者头像 李华
网站建设 2026/5/16 13:10:05

半导体周期反转:从芯片荒到库存过剩的供需博弈与未来展望

1. 从“一芯难求”到“库存如山”&#xff1a;半导体周期的戏剧性反转如果你在2020年到2022年初这段时间里&#xff0c;从事过消费电子、汽车&#xff0c;甚至家电行业&#xff0c;那么“缺芯”这个词绝对是你挥之不去的梦魇。那时候&#xff0c;一颗原本几美元的微控制器&…

作者头像 李华
网站建设 2026/5/16 13:06:27

如何在华硕路由器上3分钟安装AdGuardHome实现全网广告拦截

如何在华硕路由器上3分钟安装AdGuardHome实现全网广告拦截 【免费下载链接】Asuswrt-Merlin-AdGuardHome-Installer The Official Installer of AdGuardHome for Asuswrt-Merlin 项目地址: https://gitcode.com/gh_mirrors/as/Asuswrt-Merlin-AdGuardHome-Installer 厌倦…

作者头像 李华
网站建设 2026/5/16 13:06:05

Bash脚本AI化:用自然语言生成、优化与调试Shell脚本

1. 项目概述&#xff1a;当Bash脚本遇见AI&#xff0c;一场效率革命 如果你和我一样&#xff0c;常年与Linux服务器打交道&#xff0c;Bash脚本就是你的瑞士军刀。从批量文件处理、系统监控到自动化部署&#xff0c;它几乎无所不能。但你是否也遇到过这样的场景&#xff1a;需…

作者头像 李华