Claude Code Slash Commands:把常用提示词做成 /快捷键
生命不息,折腾不止。每天重复抄的那段提示词,敲一次
/commit就替你展开——这就是这最后一篇要还给你的「第三个零件」。
前面两篇,我们把 Claude Code 的三件套凑齐了俩:Subagents 管「并行拆活」,Skills 管「复用流程」。今天就差最后一块、也是最轻的一块——Slash Commands(斜杠命令)。它本质上就是一个「存起来的提示词」,你在输入框敲 /名字,Claude 就把文件里的整段话顶上去替你跑。
这一篇不堆术语,就带你干三件事:手写一个能接参数的 /commit;搞懂 $0 $1 这个坑过无数人的标号;最后把 slash 命令和 skills 的搭配关系彻底说清,串成你自己的完整工作流。
(前提:Claude Code 得先能用。要跑 Anthropic 的 Claude 得有个 Key 或订阅;不想绑卡的,中转站 ai.aklibk.com 国内直连、人民币按量付费,接 Claude Code 兼容接口即可,这个前面讲过了不多说。)
一、斜杠命令到底是个啥:一行 / 触发的提示词
先分两类,别混一起。
内置命令是写死在 CLI 里的、不经过模型推理的固定操作。常用这几个:
/clear清空上下文、开新会话;/compact把前面聊天压成摘要继续聊/model中途换模型;/cost(或/usage)看本次会话花了多少/diff看改动、/rewind回滚到检查点、/resume接着上次会话聊/init生成项目CLAUDE.md;/help看帮助
这些你敲 / 就能在列表里看到,权威答案永远是输入框里那个实时菜单。
自定义命令才是今天的正题。它的形态简单到离谱:一个 Markdown 文件,放进对的位置,文件名就是命令名。文件里写什么,敲 /名字 时就把什么顶给 Claude。没有安装器、没有构建、没有注册表。
下面直接动手。
二、第一个自定义命令:写张 /commit
文件放哪?项目级的 .claude/commands/,个人级(所有项目通用)的 ~/.claude/commands/。文件名决定命令名——commit.md 就是 /commit。
先写个最朴素的版本:
1 | # .claude/commands/commit.md |
敲 /commit,Claude 就照这套规矩去 git diff 然后把提交信息写给你。这就是自定义命令的本质:把一段你老要手动敲的指令,固化成一键呼出。
但这才是个「提示词」,还没成一个「工具」。让它升一个台阶的,是两点:能接参数、能自己收上下文。接下来逐个解锁。
三、参数不是摆设:$0 $1 和命名参数
一个命令能接输入,才叫工具。你敲 /commit 修复登录超时,修复登录超时 这一段就进到了文件里,靠变量替换拿到。变量有三种写法,重点全在第一处:
| 写法 | 展开成什么 |
|---|---|
$ARGUMENTS |
命令名后面你敲的整串,原样一个整体 |
$0 / $1 / $ARGUMENTS[0] [1] |
按位置拆开的第 1 / 第 2 个参数 |
$name |
在 frontmatter 里用 arguments: 声明的命名参数 |
注意,这里有个坑过无数人的地方:$0 才是第一个参数,$1 是第二个。 这跟 shell 脚本里 $1 是第一个的习惯正好反过来了。网上大量老文章还写着 $1 是第一个,直接照抄的全都错位了一位。带空格的参数要用引号包住,比如 /scaffold "user card" components,那么 $0 = user card、$1 = components。
想彻底躲开「第几个」这个计数坑,最稳的是用命名参数。在 frontmatter 里声明顺序,正文直接引用:
1 | --- |
arguments: [issue, branch] 就对应 $issue(第一个)、$branch(第二个),谁也不会数错。同理,$ARGUMENTS 会展开成整段输入;哪怕你在正文里忘了写 $ARGUMENTS,Claude Code 也会自动把它追加成 ARGUMENTS: 你敲的内容,保证输入不丢。
四、! 反引号块:让命令自己去收上下文
光靠提示词,Claude 还得自己 git diff、自己 git log,慢还容易漏。真正让命令「活起来」的一招,是**! 加反引号包一行 shell 命令**——它会在提示词送出去之前先把这条命令跑一遍,把命令的 stdout 直接嵌进提示词里。命令自己把上下文喂给自己。
把 /commit 升级一下:
1 | --- |
你敲一下 /commit,先跑 git diff --cached 把暂存内容贴进来,再跑 git log 把风格贴进来,然后 Claude 才照着写。这条命令从此不再依赖「Claude 自己去猜」——上下文是命令自己在调用前抓好的。这一句 !,就是「存起来的提示词」变成「工具」的分水岭。
五、frontmatter 里几个真正有用的旋钮
命令文件顶部可以加一段 YAML,控制它的行为。你不用全记,挑这几个真正值钱的:
1 | --- |
逐个说人话:
description:命令列表里显示的一行说明。不写的话会拿正文第一行凑数,基本没法看。argument-hint:输入框的占位提示,纯装饰但能告诉别人该传什么。model:给这条命令单独指定模型。像写提交信息这种机械活用haiku就够,能省不少;改完这一轮自动恢复会话原模型。allowed-tools:预先授权列出的工具,让它运行时不用弹权限确认。注意它是「放行」,不是「限制」——没列的工具仍然按你平时的权限规则能调用。想真正「收窄」,得用disallowed-tools把某些工具摘掉。disable-model-invocation: true:只允许你手动敲/名字触发,Claude 不会自己把它调起来。凡是带副作用的命令(部署、提交、发消息)都该加上这个,否则 Claude 可能「觉得代码差不多了」就自己触发。它还有个附加好处:description 平时不进上下文,一堆手动命令挂着也不占 token。
一句话记牢:允许用 allowed-tools 放行,限制用 disallowed-tools 收紧——这俩方向别搞反,很多人搞反了,结果一个「只读」的 review 命令跑去改文件。
六、slash 命令 vs skills:到底怎么搭
这是上一篇文章留的尾巴,今天说清。很多人拿它俩当一回事,其实差别就一个词——触发方式:
- Slash Commands 是你主动敲。你判断「此刻该跑了」,敲
/名字手动触发。 - Skills 是 Claude 自动匹配。description 常驻上下文,Claude 判断「对上了」就自己加载。
所以一句话定位:skills 管「可预测、高频、自动」;slash 命令管「你要掌控、按需、带判断」的活。
而且到 2026 年这俩的身体已经合并了:.claude/commands/name.md 和 .claude/skills/name/SKILL.md 都能生成 /name,旧命令文件照常工作,只是新特性都往 skills 那边走。同名时 skill 优先。所以:
- 就想存个快捷提示词 →
.claude/commands/一个文件就够,轻。 - 要带辅助文件、要自动触发、要更细的调用控制 →
.claude/skills/目录版,重但功能全。
实战里最常见的组合拳是:先写个 slash 命令手动跑顺,验证流程没问题了,再「毕业」成 skill 让它自动触发;而带副作用、必须你拍板的那批(/deploy /commit /发消息),永远留在 slash 命令 + disable-model-invocation: true,牢牢攥在自己手里。
到这儿三件套就齐了,收个尾:Subagents 是「再雇个人」、Skills 是「翻出说明书照着做」、Slash Commands 是「贴在你键盘上的快捷键」。 人 / 说明书 / 快捷键,三种粒度覆盖从「大块任务」到「一句话」的全部需求。
七、踩坑清单:替你趟过的这几个
$1不是第一个:再说一遍,$0才是第一个。写命令前先在心里默念「零基、零基」。拿不准就上arguments: [foo]+$foo命名参数。allowed-tools不拦人:它只放行不限制。要「只读」就再补disallowed-tools: Edit, Write。- 带副作用的命令忘了
disable-model-invocation:结果 Claude 自己跑去部署了。部署、提交、发消息这类,一律加上。 - 文件名决定命令名:命令名看的是目录/文件名,不是 frontmatter 里的
name。commit.md出的是/commit。 - 密钥别写进命令体:
.claude/commands/是要进 git 的。API Key 放环境变量,在命令里用Bash去引用,别明文塞提示词里。 - 命令越写越长:一个命令如果翻倍地涨,那它其实是「长错位置的 skill」,该带着辅助文件搬家去
.claude/skills/了。
到这里,「Claude Code 三零件」这条线就完整走完了:Subagents 拆活、Skills 复用、Slash Commands 一键触发。把上面这张 /commit 先跑通,体会一下「敲一下、上下文自动喂进来」的爽感。
生命不息,折腾不止。下一篇我们换条线,开 AI Agent 框架对比系列——把 LangGraph、Microsoft Agent Framework 和 Claude Code 这几套摆在台面上,比架构、比上手成本、比各自适合什么场景,帮你在「自建 vs 现成」里拿个准主意。先把这条
/commit存进你的.claude/commands/,咱们下一篇见。