返回列表

Claude Code 自定义 Slash Commands 完全指南:打造你的专属命令库

2026-03-08·8 分钟阅读·AI教程

前言

进阶指南的第五节里,我用大约 40 行介绍了自定义 Slash Commands 的基本用法:创建 .claude/commands/ 目录,写几个 .md 文件,用 $ARGUMENTS 传参。

但实际用下来,这个能力远比那 40 行能覆盖的要深。一套设计良好的命令库,可以把你的日常工作流压缩到几个斜杠命令里——代码审查、测试生成、功能脚手架、提交信息,全部一键触发。

这篇文章把 Slash Commands 讲透。


一、什么是 Slash Commands(Skills)

1.1 核心概念

Slash Commands 的本质很简单:把你反复输入的提示词保存成文件,用斜杠命令一键调用。

每个 .md 文件就是一个命令。文件名就是命令名:

.claude/commands/review.md  →  /review
.claude/commands/test.md    →  /test
.claude/commands/gen-api.md →  /gen-api

在 Claude Code 中输入 /review,Claude 会读取 review.md 的内容作为提示词执行。就这么简单。

1.2 项目级 vs 用户级

命令有两个存放位置:

位置路径作用域是否提交到 Git
项目级.claude/commands/*.md当前项目✅ 团队共享
用户级~/.claude/commands/*.md所有项目❌ 个人专属

经验法则:

  • 和项目技术栈相关的命令(如 /flutter-test/next-component)放项目级
  • 通用的个人习惯命令(如 /commit-msg/explain)放用户级

1.3 命名规范

命令名就是文件名(去掉 .md 后缀),建议:

  • 用小写字母和连字符:review-security.md/review-security
  • 动词开头:gen-componentcheck-a11yfix-lint
  • 按类别加前缀:test-unit.mdtest-e2e.mddoc-api.md
  • 避免太长:2-3 个单词最佳

二、命令文件的编写技巧

2.1 基本结构

一个好的命令文件应该有清晰的结构。推荐这个模板:

<!-- .claude/commands/your-command.md -->
 
## 上下文
[告诉 Claude 当前的项目背景和技术栈]
 
## 任务
[明确要做什么]
 
## 约束
[列出必须遵守的规则]
 
## 输出格式
[期望的输出形式]

2.2 好命令 vs 坏命令

对比一下:

❌ 坏命令:

帮我写测试

✅ 好命令:

为 $ARGUMENTS 编写单元测试。
 
技术栈:
- 测试框架:vitest
- 断言库:vitest 内置
- Mock:vi.mock()
 
要求:
1. 覆盖正常路径、边界情况和错误路径
2. 每个测试用 describe/it 组织,描述用中文
3. Mock 所有外部依赖(API 调用、文件系统、数据库)
4. 测试文件放在同目录的 __tests__ 下,命名为 [原文件名].test.ts
5. 不要测试实现细节,只测试公开接口的行为
 
先阅读目标文件,理解它的公开接口,然后再写测试。

区别在于:好命令给了足够的上下文和约束,Claude 不需要猜。

2.3 引用项目文件

命令中可以引用项目文件,让 Claude 先读取再执行:

先阅读以下文件了解项目规范:
- CLAUDE.md
- src/types/index.ts
- src/lib/constants.ts
 
然后为 $ARGUMENTS 生成符合项目规范的代码。

这比在命令里重复写规范要好——规范更新时,命令不需要改。

2.4 多步骤指令

复杂任务可以拆成步骤:

对 $ARGUMENTS 进行安全审计,按以下步骤执行:
 
### 第一步:静态分析
阅读代码,检查以下安全问题:
- SQL 注入
- XSS(跨站脚本)
- 命令注入
- 路径遍历
- 不安全的反序列化
 
### 第二步:依赖检查
检查 package.json 中的依赖是否有已知漏洞。
 
### 第三步:输出报告
用以下格式输出:
 
| 严重程度 | 问题 | 位置 | 建议修复 |
|---------|------|------|---------|
| 高/中/低 | 描述 | 文件:行号 | 修复方案 |
 
如果没有发现问题,明确说明"未发现安全问题"。

三、参数系统详解

3.1 基本用法

$ARGUMENTS 是唯一的参数占位符,会被替换为命令后面的所有文本:

/test src/lib/posts.ts

$ARGUMENTSsrc/lib/posts.ts

/review --focus security

$ARGUMENTS--focus security

3.2 多参数模式

$ARGUMENTS 是一个字符串,不是数组。如果需要多个参数,在命令里约定格式:

<!-- .claude/commands/compare.md -->
比较两个文件的实现差异并给出优化建议。
 
参数格式:`文件A 文件B`
 
示例用法:`/compare src/old-api.ts src/new-api.ts`
 
请分别阅读 $ARGUMENTS 中的两个文件,然后:
1. 列出主要差异
2. 分析各自的优缺点
3. 给出合并或优化建议

3.3 参数与文件路径结合

一个常见模式是把参数当作文件路径:

<!-- .claude/commands/doc.md -->
为 $ARGUMENTS 生成 JSDoc 文档注释。
 
要求:
- 为所有导出的函数、类、接口添加 JSDoc
- 包含 @param、@returns、@throws、@example
- 示例代码要可运行
- 不要修改函数实现,只添加注释
 
先阅读文件,理解每个导出成员的用途,再添加文档。

使用:/doc src/lib/utils.ts

3.4 可选参数模式

有时候参数是可选的:

<!-- .claude/commands/commit-msg.md -->
基于当前 git diff --staged 的改动,生成一条 commit message。
 
格式要求:
- 类型: 简短描述(不超过 50 字符)
- 类型包括:feat、fix、refactor、docs、test、chore
- 描述用中文
 
$ARGUMENTS
 
如果上面有额外说明,请结合说明生成。否则根据 diff 内容自行判断。

这样 /commit-msg/commit-msg 这是一个紧急修复 都能用。


四、实用命令库

这里提供一套开箱即用的命令,按类别组织。你可以直接复制到项目里用。

4.1 代码质量

/review — 代码审查

<!-- .claude/commands/review.md -->
对当前 git diff --staged 中的改动进行 Code Review。
 
检查维度:
1. **安全性** — XSS、注入、敏感信息泄露、不安全的依赖
2. **性能** — 不必要的重渲染、内存泄漏、N+1 查询、大循环
3. **可维护性** — 命名清晰度、函数长度、职责单一性
4. **边界情况** — 空值处理、错误处理、并发安全
 
输出格式:
- 每个问题标注严重程度(🔴 高 / 🟡 中 / 🟢 低)
- 给出具体的修复建议和代码示例
- 最后给一个总体评价
 
如果代码质量很好,也请明确说明。

/refactor — 重构建议

<!-- .claude/commands/refactor.md -->
分析 $ARGUMENTS 并给出重构建议。
 
分析维度:
1. 是否有重复代码可以提取
2. 函数是否过长,是否需要拆分
3. 是否有更好的设计模式可以应用
4. 类型定义是否可以优化
 
要求:
- 只建议有实际价值的重构,不要为了重构而重构
- 每个建议给出重构前后的代码对比
- 评估重构的风险和收益

4.2 测试

/test — 单元测试生成

<!-- .claude/commands/test.md -->
为 $ARGUMENTS 编写单元测试。
 
框架:vitest
规则:
1. 覆盖正常路径、边界情况、错误路径
2. describe/it 结构,描述用中文
3. Mock 外部依赖
4. 测试文件:同目录 __tests__/[文件名].test.ts
5. 只测试公开接口,不测试实现细节
 
先阅读目标文件理解接口,再写测试。

/test-edge — 边界测试补充

<!-- .claude/commands/test-edge.md -->
阅读 $ARGUMENTS 的现有测试文件,找出未覆盖的边界情况并补充测试。
 
重点关注:
- 空值 / undefined / null
- 空数组 / 空字符串
- 超大输入
- 并发调用
- 类型边界(如 Number.MAX_SAFE_INTEGER)
- 特殊字符和 Unicode
 
不要重复已有的测试用例。

4.3 文档

/doc — 代码文档生成

<!-- .claude/commands/doc.md -->
为 $ARGUMENTS 中所有导出的函数、类、接口添加文档注释。
 
格式:JSDoc / TSDoc
包含:@param、@returns、@throws、@example
要求:
- 示例代码要可运行
- 不修改实现代码
- 复杂逻辑加 @remarks 说明设计意图

/changelog — 变更日志生成

<!-- .claude/commands/changelog.md -->
基于最近的 git log 生成 CHANGELOG 条目。
 
$ARGUMENTS
 
如果指定了版本号,用该版本号;否则用日期。
 
格式:
## [版本号/日期]
 
### 新功能
- 描述
 
### 修复
- 描述
 
### 变更
- 描述
 
只包含用户可感知的变更,忽略内部重构和代码风格调整。

4.4 Git 工作流

/commit-msg — 提交信息生成

<!-- .claude/commands/commit-msg.md -->
基于 git diff --staged 生成 commit message。
 
格式:类型: 描述
类型:feat / fix / refactor / docs / test / chore / perf
描述:中文,不超过 50 字符
如果改动较大,加空行后写详细说明。
 
$ARGUMENTS

/pr-desc — PR 描述生成

<!-- .claude/commands/pr-desc.md -->
基于当前分支与 main 的 diff,生成 Pull Request 描述。
 
运行 git log main..HEAD 和 git diff main...HEAD 获取改动。
 
格式:
## 概述
一句话描述这个 PR 做了什么。
 
## 改动内容
- 列出主要改动点
 
## 测试
- 描述如何测试这些改动
 
## 截图(如适用)
标注是否需要截图。

4.5 调试

/debug — 问题诊断

<!-- .claude/commands/debug.md -->
诊断以下问题:
 
$ARGUMENTS
 
步骤:
1. 理解问题描述
2. 定位可能的相关代码
3. 分析可能的原因(列出至少 3 个)
4. 给出最可能的原因和修复方案
5. 如果需要更多信息,说明需要什么
 
不要直接修改代码,先给出分析。

/explain — 代码解释

<!-- .claude/commands/explain.md -->
解释 $ARGUMENTS 的代码逻辑。
 
要求:
- 先给一句话总结这个文件/函数的作用
- 然后逐段解释关键逻辑
- 标注复杂或不直观的部分
- 如果有潜在问题,指出来
- 用类比帮助理解复杂概念

五、命令组合与工作流

5.1 链式调用

单个命令解决单个问题,但真正的效率来自组合。一个典型的开发工作流:

# 1. 写功能
> 实现用户收藏功能,收藏数据存 localStorage
 
# 2. 审查代码
> /review
 
# 3. 生成测试
> /test src/lib/favorites.ts
 
# 4. 生成文档
> /doc src/lib/favorites.ts
 
# 5. 生成提交信息
> /commit-msg

每一步都是一个命令,Claude 在同一个会话里保持上下文,后面的命令能利用前面的结果。

5.2 复合命令

你也可以把多个步骤写进一个命令:

<!-- .claude/commands/ship.md -->
完成以下发布前检查流程:
 
1. 运行 git diff --staged 查看待提交的改动
2. 对改动进行 Code Review(检查安全、性能、可维护性)
3. 如果发现问题,列出问题但不自动修复
4. 如果没有问题,生成 commit message(格式:类型: 描述)
5. 输出最终的 commit 命令供我确认
 
不要自动执行 git commit,只输出命令。

/ship 一个命令走完审查 + 提交的流程。

5.3 命令与 Hooks 配合

Slash Commands 和 Hooks 是互补的:

Slash CommandsHooks
触发方式手动输入自动触发
执行者Claude(AI)Shell(确定性)
适用场景需要 AI 判断的任务机械性的自动化

一个典型的配合模式:

  • Slash Command /review 让 Claude 做代码审查(需要 AI 理解代码)
  • Hook PostToolUse 在每次写文件后自动跑 prettier(不需要 AI,确定性执行)

两者结合,AI 负责思考,Hook 负责执行。


六、团队协作

6.1 Git 共享

.claude/commands/ 提交到 Git,团队所有人都能用:

git add .claude/commands/
git commit -m "feat: 添加团队共享的 Claude 命令"

目录结构建议:

.claude/
  commands/
    review.md           # 代码审查
    test.md             # 测试生成
    gen-component.md    # 组件脚手架
    commit-msg.md       # 提交信息
    pr-desc.md          # PR 描述
  settings.json         # Hooks 配置

6.2 命名约定

团队应该统一命名规范,避免混乱:

# 推荐:按类别加前缀
review.md
review-security.md
test.md
test-edge.md
gen-component.md
gen-api.md

# 不推荐:无规律
check.md
make-test.md
component.md
new-endpoint.md

6.3 新人引导

在项目 README 或 CLAUDE.md 中列出可用命令:

## 可用的 Claude 命令
 
| 命令 | 用途 | 示例 |
|------|------|------|
| `/review` | 代码审查 | `/review` |
| `/test` | 生成测试 | `/test src/lib/posts.ts` |
| `/gen-component` | 生成组件 | `/gen-component UserProfile` |
| `/commit-msg` | 生成提交信息 | `/commit-msg` |
| `/pr-desc` | 生成 PR 描述 | `/pr-desc` |

新人加入项目,看一眼就知道有哪些命令可用。

6.4 版本管理

命令也需要维护。建议:

  1. 定期审查 — 每个迭代检查一次,删除不再使用的命令
  2. 保持简洁 — 一个命令做一件事,不要让命令变成巨型提示词
  3. 写注释 — 在命令文件开头用 HTML 注释说明用途和作者
<!--
  作者:@jimmy
  用途:生成符合项目规范的 React 组件
  更新:2026-03-15
-->
为 $ARGUMENTS 生成一个 React 组件...

七、实战示例一:通用 Web 开发

以这个 Next.js 博客项目为例,展示如何构建一套完整的命令库。

7.1 /gen-component — 组件生成器

<!-- .claude/commands/gen-component.md -->
生成一个名为 $ARGUMENTS 的 React 组件。
 
项目技术栈:
- Next.js 16 (App Router) + TypeScript
- Tailwind CSS v4
- next-intl 做 i18n
 
规则:
1. 默认生成 Server Component,除非组件名包含 "Client" 或需要交互
2. 文件放在 components/ 目录下
3. 使用 Tailwind CSS 做样式,不用 CSS Modules
4. 如果组件需要文本,使用 next-intl 的 useTranslations
5. 添加必要的 aria 属性确保可访问性
6. Props 用 interface 定义,命名为 [组件名]Props
 
先检查 components/ 目录下是否已有同名组件。

7.2 /i18n-check — 国际化检查

<!-- .claude/commands/i18n-check.md -->
检查项目的国际化完整性。
 
步骤:
1. 读取 messages/zh.json 和 messages/en.json
2. 对比两个文件的 key 结构,找出:
   - zh 有但 en 没有的 key
   - en 有但 zh 没有的 key
   - 值为空字符串的 key
3. 扫描 components/ 和 app/ 目录,找出硬编码的中文或英文文本
4. 检查是否有使用了但未定义的 i18n key
 
输出格式:
- 缺失的 key 列表(标注在哪个文件缺失)
- 硬编码文本列表(标注文件和行号)
- 未定义的 key 列表

7.3 /gen-post — 博客文章脚手架

<!-- .claude/commands/gen-post.md -->
创建一篇新的博客文章脚手架。
 
参数格式:slug 标题
示例:/gen-post my-new-post 我的新文章
 
根据 $ARGUMENTS 创建:
1. content/zh/[slug].mdx — 中文版,包含 frontmatter
2. content/en/[slug].mdx — 英文版,包含 frontmatter
 
Frontmatter 模板:
---
title: "标题"
date: "当前日期 YYYY-MM-DD"
description: 待填写
tags: ["待分类"]
---
 
## 前言
 
[在这里开始写作]
 
两个文件都创建好后,提醒我填写 description 和 tags。

7.4 /a11y-audit — 可访问性审计

<!-- .claude/commands/a11y-audit.md -->
对 $ARGUMENTS 进行可访问性审计。
 
检查清单:
1. **语义化 HTML** — 是否使用了正确的 HTML 元素(button vs div, nav vs div)
2. **ARIA 属性** — 是否有必要的 aria-label、aria-describedby、role
3. **键盘导航** — 所有交互元素是否可通过键盘访问
4. **焦点管理** — 模态框、下拉菜单是否有焦点陷阱
5. **颜色对比** — 文本颜色与背景色的对比度是否足够
6. **图片替代文本** — img 是否有 alt,装饰性图片是否有 aria-hidden
7. **动态内容** — 动态更新的内容是否有 aria-live
 
输出每个问题的位置和修复建议。

7.5 完整工作流演示

假设要给博客添加一个"阅读进度条"组件:

# 1. 生成组件脚手架
> /gen-component ReadingProgress
 
# Claude 生成 components/ReadingProgress.tsx
# 包含滚动监听、进度计算、Tailwind 样式
 
# 2. 检查可访问性
> /a11y-audit components/ReadingProgress.tsx
 
# Claude 指出需要添加 role="progressbar" 和 aria-valuenow
 
# 3. 生成测试
> /test components/ReadingProgress.tsx
 
# 4. 检查 i18n(如果组件有文本)
> /i18n-check
 
# 5. 审查并提交
> /review
> /commit-msg

五个命令,从脚手架到提交,全流程覆盖。


八、实战示例二:Flutter 开发

Flutter 项目(特别是 Clean Architecture)有大量重复的样板代码。Slash Commands 可以大幅减少这些重复工作。

8.1 项目结构约定

假设项目使用标准的 Clean Architecture:

lib/
  core/
    error/failures.dart
    usecases/usecase.dart
  features/
    auth/
      data/
        models/
        repositories/
        datasources/
      domain/
        entities/
        repositories/
        usecases/
      presentation/
        cubits/
        pages/
        widgets/

8.2 /flutter-feature — 功能脚手架

<!-- .claude/commands/flutter-feature.md -->
为 Flutter 项目创建一个新功能模块的完整目录结构。
 
功能名称:$ARGUMENTS
 
创建以下目录和文件:
 
lib/features/[功能名]/
  data/
    models/[功能名]_model.dart
    repositories/[功能名]_repository_impl.dart
    datasources/[功能名]_remote_datasource.dart
  domain/
    entities/[功能名].dart
    repositories/[功能名]_repository.dart
    usecases/get_[功能名].dart
  presentation/
    cubits/[功能名]_cubit.dart
    cubits/[功能名]_state.dart
    pages/[功能名]_page.dart
    widgets/
 
每个文件只包含基本骨架(类定义、必要的 import),不写具体实现。
 
参考现有功能模块的代码风格(如 lib/features/auth/)。
功能名使用 snake_case。

8.3 /flutter-bloc — Cubit/Bloc 生成

<!-- .claude/commands/flutter-bloc.md -->
为 $ARGUMENTS 生成 Cubit 和 State 类。
 
参数格式:功能名 状态列表
示例:/flutter-bloc favorites Initial,Loading,Loaded,Error
 
规则:
1. 使用 flutter_bloc 的 Cubit(不是 Bloc,除非明确要求)
2. State 使用 sealed class(Dart 3)
3. Loaded state 包含对应的数据字段
4. Error state 包含 String message 字段
5. Cubit 方法只定义签名,方法体写 TODO 注释
6. 添加 equatable 支持
 
文件:
- lib/features/[功能名]/presentation/cubits/[功能名]_cubit.dart
- lib/features/[功能名]/presentation/cubits/[功能名]_state.dart
 
参考项目中现有的 Cubit 实现风格。

8.4 /flutter-model — 数据模型生成

<!-- .claude/commands/flutter-model.md -->
根据描述生成 Flutter 数据模型。
 
$ARGUMENTS
 
要求:
1. Entity(domain 层):纯 Dart 类,不依赖任何包
2. Model(data 层):继承 Entity,添加 fromJson/toJson
3. 使用 freezed 或手写,取决于项目现有风格
4. 如果用 Hive,添加 TypeAdapter
5. 包含 copyWith 方法
 
先检查项目中现有的 Model 实现方式,保持一致。

8.5 /flutter-test — Flutter 测试生成

<!-- .claude/commands/flutter-test.md -->
为 $ARGUMENTS 生成测试。
 
自动判断测试类型:
- domain/usecases/ → 单元测试,mock Repository
- data/repositories/ → 单元测试,mock DataSource
- presentation/cubits/ → bloc_test,mock UseCase
- presentation/pages/ → Widget 测试,mock Cubit
- presentation/widgets/ → Widget 测试
 
规则:
1. 使用 mocktail 做 mock
2. Cubit 测试使用 bloc_test 包
3. Widget 测试使用 BlocProvider.value 注入 mock Cubit
4. 测试文件镜像 lib/ 的目录结构放在 test/ 下
5. 每个测试用 group/test 组织
 
先阅读目标文件,理解依赖关系,再写测试。

8.6 /flutter-review — Flutter 代码审查

<!-- .claude/commands/flutter-review.md -->
对当前 git diff --staged 进行 Flutter 项目专属的 Code Review。
 
除了通用的代码审查(安全、性能、可维护性),额外检查:
 
1. **架构合规** — 是否遵守 Clean Architecture 的依赖规则
   - domain 层不依赖 data 层或 presentation 层
   - data 层不依赖 presentation 层
2. **状态管理** — Cubit/Bloc 使用是否正确
   - State 是否不可变
   - 是否在 Widget 中直接操作数据(应该通过 Cubit)
3. **Widget 优化**
   - 是否有不必要的 rebuild(缺少 const、BlocSelector)
   - 是否有过深的 Widget 嵌套(建议提取)
4. **Dart 规范**
   - 是否使用了 Dart 3 的新特性(patterns、sealed class)
   - 命名是否符合 Dart 规范(lowerCamelCase、UpperCamelCase)
5. **依赖注入** — 是否正确注册到 get_it

8.7 实战:用命令构建"收藏"功能

完整演示如何用上面的命令从零构建一个收藏功能:

# 第一步:创建功能模块骨架
> /flutter-feature favorites
 
# Claude 创建完整的目录结构:
# lib/features/favorites/data/models/favorites_model.dart
# lib/features/favorites/data/repositories/favorites_repository_impl.dart
# lib/features/favorites/domain/entities/favorites.dart
# lib/features/favorites/domain/repositories/favorites_repository.dart
# lib/features/favorites/domain/usecases/get_favorites.dart
# lib/features/favorites/presentation/cubits/favorites_cubit.dart
# lib/features/favorites/presentation/cubits/favorites_state.dart
# lib/features/favorites/presentation/pages/favorites_page.dart
 
# 第二步:生成数据模型
> /flutter-model Favorite 实体:id(String), itemId(String),
  itemType(enum: article/video/podcast), createdAt(DateTime),
  userId(String)。使用 Hive 存储。
 
# 第三步:生成 Cubit
> /flutter-bloc favorites Initial,Loading,Loaded,Error
 
# 第四步:实现业务逻辑
> 实现 favorites 功能的 UseCase:
  - AddFavorite:添加收藏,检查是否已收藏
  - RemoveFavorite:取消收藏
  - GetFavorites:获取收藏列表,支持分页
  - CheckFavorite:检查某个 item 是否已收藏
 
# 第五步:生成测试
> /flutter-test lib/features/favorites/domain/usecases/
> /flutter-test lib/features/favorites/presentation/cubits/favorites_cubit.dart
 
# 第六步:代码审查
> /flutter-review

六步完成一个完整功能的骨架、模型、状态管理、业务逻辑、测试和审查。


九、最佳实践与反模式

9.1 最佳实践

  1. 一个命令做一件事 — 保持命令的职责单一,复杂流程用命令组合
  2. 给足上下文 — 技术栈、框架版本、项目约定,写在命令里
  3. 约束优于自由 — 明确告诉 Claude 不要做什么,比告诉它做什么更重要
  4. 引用而非复制 — 让 Claude 读项目文件获取规范,而不是在命令里复制规范
  5. 先读后写 — 命令中加"先阅读目标文件",避免 Claude 凭空生成
  6. 输出格式化 — 指定输出格式(表格、列表、代码块),让结果更易读
  7. 团队统一 — 命令提交到 Git,配合 CLAUDE.md 统一规范
  8. 定期维护 — 删除不用的命令,更新过时的命令

9.2 反模式

反模式问题正确做法
命令太模糊"帮我写代码" — Claude 不知道写什么明确任务、技术栈、约束
命令太长500 行的命令文件拆成多个小命令,组合使用
硬编码规范命令里写死代码规范引用 CLAUDE.md 或项目文件
不用 $ARGUMENTS每次都要手动改命令文件用 $ARGUMENTS 参数化
命令重复review.md 和 code-review.md 做同一件事统一命名,删除重复
不写约束Claude 自由发挥,结果不可控明确列出"不要做什么"
忽略项目上下文命令不引用项目文件让 Claude 先读相关文件
不测试命令写完就提交,没验证效果先自己跑一遍,确认输出符合预期

十、常见问题

Q1:Slash Commands 和直接输入提示词有什么区别?

功能上没有区别——Slash Commands 就是保存好的提示词。区别在于效率:常用的提示词保存成命令后,不需要每次重新输入,也不会因为手动输入而遗漏关键约束。

Q2:命令文件支持什么格式?

只支持 .md(Markdown)文件。文件内容就是纯文本提示词,Markdown 格式只是为了可读性,Claude 会把整个文件内容作为提示词处理。

Q3:$ARGUMENTS 可以有多个吗?

不可以。只有一个 $ARGUMENTS,它会被替换为命令后面的所有文本。如果需要多个参数,在命令里约定格式(如"参数1 参数2"),然后让 Claude 自己解析。

Q4:命令可以调用其他命令吗?

不能直接调用。但你可以在一个会话里依次执行多个命令,它们共享上下文。如果需要固定的命令序列,写一个复合命令把所有步骤放在一个文件里。

Q5:项目级和用户级命令冲突了怎么办?

如果同名,项目级命令优先。建议用不同的命名避免冲突:项目级用项目相关的前缀(如 flutter-next-),用户级用通用名称(如 reviewtest)。

Q6:命令文件有大小限制吗?

没有硬性限制,但建议控制在 200 行以内。太长的命令会占用上下文窗口,而且 Claude 可能会忽略后面的指令。如果命令超过 200 行,考虑拆分。

Q7:怎么知道有哪些可用命令?

在 Claude Code 中输入 / 然后按 Tab,会列出所有可用的命令(包括内置命令和自定义命令)。


总结

Slash Commands 是 Claude Code 中最容易上手、回报最高的功能之一。核心思路:

  1. 识别重复 → 找出你反复输入的提示词
  2. 提炼命令 → 加上上下文、约束、输出格式,保存为 .md 文件
  3. 组合使用 → 多个命令串联,覆盖完整工作流
  4. 团队共享 → 提交到 Git,统一团队的工作方式

从今天开始,每次你发现自己在重复输入类似的提示词,就把它变成一个命令。


推荐阅读