自定义斜杠命令:让 Claude Code 一键帮你 Git 提交

第六章. 自定义斜杠命令

本章摘要:每次让 Claude 生成 Git 提交信息,你都要打一长串提示词?每次让它按特定格式输出,你都要重复说明?自定义斜杠命令让你把这些常用操作封装成一键命令——输入 /commit,Claude 就知道该怎么做。

本章学习路径

阶段内容解锁能力
第一阶段命令文件结构理解斜杠命令的存放位置和优先级
第二阶段高级特性掌握参数传递、Bash 执行、文件引用
第三阶段实战创建完成一个 Git 提交命令的配置

6.1. 命令文件结构

上一章我们学会了创建子代理——专门处理特定任务的 “专家”。但子代理的触发是 隐式的(Claude 自动判断何时使用)。

“我想要一个更直接的方式——我输入 /xxx,Claude 就执行特定的操作。”

这就是 自定义斜杠命令 的用途。

6.1.1. 项目命令 vs 个人命令

斜杠命令分为两种:

类型存放位置作用范围是否共享
项目命令.claude/commands/当前项目是(提交到 Git)
个人命令~/.claude/commands/所有项目

创建方式

每个命令是一个 Markdown 文件,文件名就是命令名。

1
2
3
4
5
6
7
# 创建项目命令
mkdir -p .claude/commands
echo "分析这段代码的性能问题:" > .claude/commands/perf.md

# 创建个人命令
mkdir -p ~/.claude/commands
echo "用中文回答我的问题:" > ~/.claude/commands/cn.md

创建后,你就可以使用 /perf/cn 命令了。

6.1.2. 命名空间与优先级

命名空间

你可以用子目录来组织命令。子目录名会显示在命令描述中,但不影响命令名。

1
2
3
4
5
.claude/commands/
├── frontend/
│ └── component.md # 命令名:/component,描述显示 (project:frontend)
└── backend/
└── api.md # 命令名:/api,描述显示 (project:backend)

优先级

当项目命令和个人命令同名时,项目命令优先

例如,如果 .claude/commands/deploy.md~/.claude/commands/deploy.md 都存在,/deploy 会执行项目版本。

6.1.3. 本节小结

斜杠命令的存放规则:

位置命令类型优先级
.claude/commands/项目命令
~/.claude/commands/个人命令

6.2. 高级特性

基础的斜杠命令只是一段静态的提示词。但 Claude Code 支持更强大的特性,让命令变得动态、灵活。

6.2.1. 参数传递

$ARGUMENTS:获取所有参数

1
2
# .claude/commands/fix-issue.md
修复 Issue #$ARGUMENTS,遵循我们的代码规范。

使用方式:

1
› /fix-issue 123

Claude 收到的提示词是:“修复 Issue #123,遵循我们的代码规范。”

$1, $ 2, $3…:获取单个参数

1
2
# .claude/commands/compare.md
比较 $1 和 $2 两个文件的差异,重点关注 $3 方面。

使用方式:

1
› /compare src/old.js src/new.js 性能

Claude 收到的提示词是:“比较 src/old.js 和 src/new.js 两个文件的差异,重点关注性能方面。”

6.2.2. Bash 命令执行

使用 ! 前缀可以在命令中执行 Bash 命令,并将输出嵌入到提示词中。

1
2
3
4
5
6
7
8
9
10
11
12
# .claude/commands/review.md
---
allowed-tools: Bash(git diff:*)
---

## 当前变更

!`git diff --staged`

## 任务

审查上述代码变更,检查是否有问题。

工作原理

  1. 执行 /review 时,Claude Code 先运行 git diff --staged
  2. 将命令输出替换到提示词中
  3. Claude 收到的是包含实际 diff 内容的完整提示词

使用 Bash 执行功能时,必须在 frontmatter 中声明 allowed-tools,否则命令不会执行。

6.2.3. 文件引用

使用 @ 前缀可以引用文件内容。

1
2
3
4
5
6
# .claude/commands/explain.md
解释以下代码的工作原理:

@src/core/engine.js

重点说明核心算法的实现思路。

工作原理

  1. 执行 /explain 时,Claude Code 读取 src/core/engine.js 的内容
  2. 将文件内容替换到提示词中
  3. Claude 收到的是包含实际代码的完整提示词

6.2.4. Frontmatter 配置

命令文件支持 YAML frontmatter,用于配置命令的行为。

1
2
3
4
5
6
7
8
---
allowed-tools: Bash(git:*), Read
description: 生成规范的 Git 提交信息
model: haiku
argument-hint: [提交类型] [简短描述]
---

根据当前的代码变更,生成一条规范的 Git 提交信息。

可用配置项

配置项作用示例
allowed-tools允许使用的工具Bash(git:*), Read
description命令描述(显示在帮助中)"生成提交信息"
model使用的模型haiku
argument-hint参数提示[issue-id]

6.2.5. 本节小结

斜杠命令的高级特性:

特性语法用途
参数传递$ARGUMENTS, $1, $2动态输入
Bash 执行!`command`获取系统信息
文件引用@path/to/file嵌入文件内容
Frontmatter--- 包裹的 YAML配置命令行为

6.3. 实战:创建 Git 提交命令

理论讲完了,现在来实战创建一个自动生成 Git 提交信息的命令。

6.3.1. 需求分析

我们想要一个 /commit 命令,它能够:

  • 自动读取当前的 git diff --staged 内容
  • 根据变更内容生成规范的提交信息
  • 遵循 Conventional Commits 规范(feat:, fix:, docs: 等)
  • 自动执行 git commit

6.3.2. 编写命令文件

步骤 1:创建目录

1
mkdir -p .claude/commands

步骤 2:创建命令文件

创建文件 .claude/commands/commit.md

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
---
allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git add:*), Bash(git commit:*)
description: 根据暂存的变更自动生成并执行 Git 提交
---

## 上下文信息

- 当前 Git 状态:!`git status --short`
- 当前分支:!`git branch --show-current`
- 暂存的变更:!`git diff --staged`

## 任务

根据上述暂存的代码变更,执行以下步骤:

1. 分析变更内容,确定提交类型:
- `feat`: 新功能
- `fix`: 修复 Bug
- `docs`: 文档变更
- `style`: 代码格式(不影响功能)
- `refactor`: 重构(不是新功能也不是修复)
- `test`: 测试相关
- `chore`: 构建或辅助工具变更

2. 生成提交信息,格式为:
<type>(<scope>): <subject>

<body>
3. 执行 `git commit -m "提交信息"`

## 注意事项

- subject 不超过 50 个字符
- body 用中文描述具体变更内容
- 如果没有暂存的变更,提示用户先执行 `git add`

6.3.3. 测试与使用

步骤 1:暂存一些变更

1
git add src/some-file.js

步骤 2:执行命令

1
› /commit

image-20260108180224593

6.3.4. 本节小结

创建自定义斜杠命令的流程:

步骤操作产出
需求分析明确命令的功能和输入输出功能清单
编写命令创建 .claude/commands/xxx.md命令文件
配置权限在 frontmatter 中声明 allowed-tools工具白名单
测试使用执行 /xxx 验证效果确认可用

6.4. 本章总结与命令速查

本章我们学习了自定义斜杠命令——把常用操作封装成一键命令。核心思想是:减少重复输入,提高工作效率

6.4.1. 场景速查:遇到这些情况,直接用

场景 1:创建简单的提示词命令

创建 .claude/commands/cn.md

1
用中文回答我的问题,语言要通俗易懂。

使用:/cn 什么是闭包?

场景 2:创建带参数的命令

创建 .claude/commands/explain.md

1
用 $1 的方式解释以下概念:$ARGUMENTS

使用:/explain 类比 什么是递归

场景 3:创建读取文件的命令

创建 .claude/commands/review-file.md

1
2
3
审查以下代码文件,找出潜在问题:

@$1

使用:/review-file src/utils.js

场景 4:创建执行 Bash 的命令

创建 .claude/commands/status.md

1
2
3
4
5
6
7
8
9
10
11
---
allowed-tools: Bash(git:*), Bash(npm:*)
---

## 项目状态

- Git 状态:!`git status --short`
- 当前分支:!`git branch --show-current`
- 依赖状态:!`npm outdated 2>/dev/null || echo "依赖已是最新"`

根据上述信息,总结当前项目状态。

使用:/status

场景 5:查看所有可用命令

1
› /help

所有自定义命令会显示在帮助列表中。