Claude之父AI编程技巧七:Slash命令处理重复工作流——将经验沉淀为可复用的自动化
本文介绍了Claude Code的Slash命令功能,它通过将重复工作流封装为简单命令来提高开发效率。Slash命令是以"/"开头的特殊命令,具有一致性、可复用性等特点,能显著减少手动操作。文章详细讲解了内置命令(如/help、/test)和自定义命令的创建方法,包括简单提交命令和复杂功能开发命令的示例代码。通过将团队经验沉淀为可复用的自动化脚本,Slash命令不仅简化了开发流
Claude之父AI编程技巧七:Slash命令处理重复工作流——将经验沉淀为可复用的自动化
引言
在日常开发中,我们经常重复执行相同的操作:提交代码、创建功能分支、运行测试、部署应用…这些操作虽然不复杂,但每次都需要输入相似的命令,消耗时间和精力。更重要的是,这些操作往往蕴含着团队的约定和最佳实践,如果每次都手动执行,就容易出错或遗漏。
Claude Code的Slash命令(斜杠命令)正是为解决这个问题而生。它允许你将复杂的工作流封装为简单的命令,让经验的传承变得简单,让操作的效率大幅提升。
本文将深入探讨如何创建和使用自定义的Slash命令,让你的开发工作流更加流畅。
理解Slash命令
什么是Slash命令?
Slash命令是以/开头的特殊命令,用于快速触发预定义的工作流:
/commit # 自动提交代码
/test # 运行测试套件
/deploy # 部署应用到生产环境
/refactor # 开始重构任务
与普通对话不同,Slash命令是一段预定义的行为,可以包含多个步骤、复杂的逻辑和条件判断。
Slash命令的特点
| 特性 | 描述 |
|---|---|
| 一致性 | 每次执行都遵循相同的流程 |
| 可复用 | 团队成员都可以使用 |
| 可配置 | 可以接受参数和选项 |
| 可审计 | 执行过程可追踪 |
| 可组合 | 可以调用其他命令和工具 |
与普通命令的区别
普通对话:
用户:帮我提交代码
Claude:好的,请输入提交信息
用户:修复登录bug
Claude:已提交
Slash命令:
用户:/commit "修复登录bug"
Claude:→ 检查变更文件
→ 运行lint
→ 运行测试
→ 创建提交
→ 显示结果
内置Slash命令
Claude Code提供了一系列内置的Slash命令:
| 命令 | 功能 | 使用场景 |
|---|---|---|
/help |
显示帮助信息 | 了解可用命令 |
/status |
显示当前项目状态 | 检查工作区状态 |
/init |
初始化新项目 | 设置CLAUDE.md |
/clear |
清除对话历史 | 开始新对话 |
/read |
读取并分析文件 | 理解代码结构 |
/search |
搜索代码库 | 查找特定代码 |
/test |
运行测试 | 验证代码正确性 |
/linter |
运行代码检查 | 保证代码质量 |
自定义Slash命令
创建命令的基本结构
自定义Slash命令存储在.claude/commands/目录下:
.claude/
├── commands/
│ ├── commit.sh
│ ├── feature.sh
│ ├── deploy.sh
│ └── review.sh
└── settings.json
简单命令示例
创建一个自动提交命令:
#!/bin/bash
# .claude/commands/commit.sh
# 用法: /commit "<提交信息>"
COMMIT_MESSAGE="$1"
if [ -z "$COMMIT_MESSAGE" ]; then
echo "请提供提交信息,例如:/commit \"修复bug\""
exit 1
fi
echo "🚀 开始提交流程..."
# 1. 显示变更概览
echo ""
echo "📝 变更的文件:"
git status --short
# 2. 运行代码检查
echo ""
echo "🔍 运行代码检查..."
if command -v npm &> /dev/null; then
npm run lint
elif command -v yarn &> /dev/null; then
yarn lint
fi
# 3. 运行测试
echo ""
echo "🧪 运行测试..."
if command -v npm &> /dev/null; then
npm test -- --passWithNoTests
elif command -v yarn &> /dev/null; then
yarn test --passWithNoTests
fi
# 4. 添加变更
echo ""
echo "➕ 添加变更..."
git add -A
# 5. 创建提交
echo ""
echo "📦 创建提交..."
git commit -m "$COMMIT_MESSAGE"
echo ""
echo "✅ 提交完成!"
echo "提交信息:$COMMIT_MESSAGE"
复杂命令示例
创建一个功能开发命令:
#!/bin/bash
# .claude/commands/feature.sh
# 用法: /feature "<功能名称>"
FEATURE_NAME="$1"
if [ -z "$FEATURE_NAME" ]; then
echo "请提供功能名称,例如:/feature \"用户认证\""
exit 1
fi
# 转换为小写和短横线格式
BRANCH_NAME=$(echo "$FEATURE_NAME" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
echo "🚀 开始功能开发:$FEATURE_NAME"
echo "分支名称:feature/$BRANCH_NAME"
# 1. 确保主分支最新
echo ""
echo "🔄 同步主分支..."
git checkout main
git pull origin main
# 2. 创建功能分支
echo ""
echo "🌿 创建功能分支..."
git checkout -b "feature/$BRANCH_NAME"
# 3. 生成TODO列表
echo ""
echo "📋 生成开发计划..."
cat > "docs/TODO-$BRANCH_NAME.md" << EOF
# $FEATURE_NAME 开发计划
创建时间:$(date +"%Y-%m-%d %H:%M")
## 目标
开发$FEATURE_NAME功能
## 任务列表
- [ ] 需求分析
- [ ] 架构设计
- [ ] 数据库设计
- [ ] 后端API开发
- [ ] 前端界面开发
- [ ] 单元测试
- [ ] 集成测试
- [ ] 代码审查
- [ ] 合并到主分支
## 备注
EOF
echo "✅ 已创建开发计划文档:docs/TODO-$BRANCH_NAME.md"
# 4. 初始化开发环境
echo ""
echo "🔧 检查开发环境..."
if [ -f "package.json" ]; then
echo "安装依赖..."
npm install
fi
# 5. 显示下一步指导
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🎯 下一步操作:"
echo ""
echo "1. 编辑 docs/TODO-$BRANCH_NAME.md,添加详细任务"
echo "2. 开始实现功能"
echo "3. 使用 /commit 命令提交变更"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
接受参数的命令
创建一个灵活的测试命令:
#!/bin/bash
# .claude/commands/test.sh
# 用法:
# /test # 运行所有测试
# /test unit # 仅运行单元测试
# /test integration # 仅运行集成测试
# /test --coverage # 运行测试并生成覆盖率报告
TEST_TYPE="$1"
COVERAGE_FLAG=""
VERBOSE_FLAG=""
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
--coverage)
COVERAGE_FLAG="--coverage"
shift
;;
--verbose)
VERBOSE_FLAG="--verbose"
shift
;;
*)
TEST_TYPE="$1"
shift
;;
esac
done
echo "🧪 运行测试..."
# 确定测试命令
if command -v npm &> /dev/null; then
TEST_CMD="npm test"
elif command -v yarn &> /dev/null; then
TEST_CMD="yarn test"
elif command -v pnpm &> /dev/null; then
TEST_CMD="pnpm test"
else
echo "❌ 未找到测试命令,请确保已安装npm/yarn/pnpm"
exit 1
fi
# 根据类型执行测试
case $TEST_TYPE in
unit)
echo "运行单元测试..."
$TEST_CMD -- test/unit --watchAll=false $COVERAGE_FLAG $VERBOSE_FLAG
;;
integration)
echo "运行集成测试..."
$TEST_CMD -- test/integration --watchAll=false $COVERAGE_FLAG $VERBOSE_FLAG
;;
e2e)
echo "运行端到端测试..."
if command -v cypress &> /dev/null; then
cypress run
else
$TEST_CMD -- test/e2e --watchAll=false $COVERAGE_FLAG $VERBOSE_FLAG
fi
;;
"")
echo "运行所有测试..."
$TEST_CMD -- --watchAll=false $COVERAGE_FLAG $VERBOSE_FLAG
;;
*)
echo "运行指定的测试:$TEST_TYPE"
$TEST_CMD -- "$TEST_TYPE" --watchAll=false $COVERAGE_FLAG $VERBOSE_FLAG
;;
esac
TEST_EXIT_CODE=$?
if [ $TEST_EXIT_CODE -eq 0 ]; then
echo ""
echo "✅ 所有测试通过!"
else
echo ""
echo "❌ 测试失败,请检查错误信息"
fi
exit $TEST_EXIT_CODE
命令脚本的组成要素
元信息头部
每个命令脚本可以包含元信息:
#!/bin/bash
# name: commit
# description: 自动提交代码变更
# usage: /commit "<提交信息>"
# author: 开发团队
# version: 1.0.0
# requires:
# - git
# - npm (可选,用于运行lint和test)
错误处理
#!/bin/bash
set -e # 遇到错误立即退出
# 自定义错误处理函数
error_exit() {
echo "❌ 错误:$1" >&2
exit 1
}
# 检查必要条件
check_requirements() {
if ! command -v git &> /dev/null; then
error_exit "未安装git"
fi
# 检查是否是git仓库
if ! git rev-parse --git-dir > /dev/null 2>&1; then
error_exit "当前目录不是git仓库"
fi
}
# 执行检查
check_requirements
交互式输入
#!/bin/bash
# 获取用户确认
confirm() {
read -p "$1 [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "已取消"
exit 0
fi
}
# 使用示例
confirm "确定要删除这个分支吗?"
彩色输出
#!/bin/bash
# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${GREEN}✅ 成功${NC}"
echo -e "${YELLOW}⚠️ 警告${NC}"
echo -e "${RED}❌ 错误${NC}"
echo -e "${BLUE}ℹ️ 信息${NC}"
团队命令库
创建命令库结构
.claude/
├── commands/
│ ├── git/
│ │ ├── start-day.sh # 每日开始工作
│ │ ├── end-day.sh # 每日结束工作
│ │ ├── sync.sh # 同步远程变更
│ │ └── cleanup.sh # 清理分支
│ ├── pr/
│ │ ├── create.sh # 创建PR
│ │ ├── review.sh # 审查PR
│ │ └── merge.sh # 合并PR
│ ├── deploy/
│ │ ├── staging.sh # 部署到预发布
│ │ ├── production.sh # 部署到生产
│ │ └── rollback.sh # 回滚
│ └── dev/
│ ├── new-component.sh # 创建新组件
│ ├── new-api.sh # 创建新API
│ └── generate-doc.sh # 生成文档
└── settings.json
每日开始工作命令
#!/bin/bash
# .claude/commands/git/start-day.sh
echo "🌅 每日开始工作"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# 1. 显示今日日期
echo ""
echo "📅 日期:$(date +"%Y年%m月%d日 %A")"
# 2. 显示当前分支
echo ""
echo "🌿 当前分支:$(git branch --show-current)"
# 3. 显示待处理的工作
echo ""
echo "📋 待处理的工作:"
# 检查本地变更
if ! git diff --quiet; then
echo " ⚠️ 有未提交的变更"
git status --short
fi
# 检查远程同步状态
echo ""
echo "🔄 同步状态:"
git fetch origin
UPSTREAM=$(git rev-parse --abbrev-ref @{u})
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
if [ "$LOCAL" = "$REMOTE" ]; then
echo " ✅ 本地与远程同步"
else
echo " ⚠️ 远程有新的提交"
git log --oneline "$LOCAL".."$UPSTREAM"
fi
# 4. 显示待审查的PR
echo ""
echo "👀 待审查的PR:"
gh pr list --state "pending_review" --limit 3 --json number,title,author
# 5. 显示提醒事项
echo ""
echo "📌 提醒:"
echo " - 记得在开始工作前运行 /test 确保测试通过"
echo " - 提交前使用 /commit 命令遵循提交规范"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✨ 准备开始工作吧!"
部署命令(带安全检查)
#!/bin/bash
# .claude/commands/deploy/production.sh
set -e
echo "🚀 生产环境部署"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 确认部署
confirm() {
read -p "$1 [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "已取消部署"
exit 0
fi
}
warn() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
success() {
echo -e "${GREEN}✅ $1${NC}"
}
error() {
echo -e "${RED}❌ $1${NC}"
exit 1
}
# 1. 安全检查
echo ""
echo "🔒 安全检查..."
# 检查是否在主分支
CURRENT_BRANCH=$(git branch --show-current)
if [ "$CURRENT_BRANCH" != "main" ]; then
warn "当前不在main分支(当前:$CURRENT_BRANCH)"
confirm "确定要在非main分支部署到生产环境吗?"
fi
# 检查未提交的变更
if ! git diff --quiet; then
error "存在未提交的变更,请先提交或暂存"
fi
# 检查测试状态
echo ""
echo "🧪 检查测试状态..."
if ! npm test -- --watchAll=false --passWithNoTests 2>/dev/null; then
error "测试未通过,无法部署"
fi
success "测试通过"
# 2. 构建应用
echo ""
echo "🔨 构建应用..."
npm run build
if [ $? -ne 0 ]; then
error "构建失败"
fi
success "构建成功"
# 3. 收集用户确认
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "⚠️ 即将部署到生产环境!"
echo ""
echo "分支:$CURRENT_BRANCH"
echo "提交:$(git rev-parse HEAD)"
echo "时间:$(date '+%Y-%m-%d %H:%M:%S')"
echo ""
confirm "确认部署到生产环境?"
# 4. 执行部署
echo ""
echo "📦 开始部署..."
# 实际的部署命令取决于你的基础设施
# 以下是示例:
# docker build -t myapp:latest .
# docker push myregistry/myapp:latest
# kubectl rollout restart deployment/myapp
success "部署完成!"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 下一步:"
echo " 1. 监控应用日志"
echo " 2. 检查健康检查端点"
echo " 3. 验证关键功能"
echo ""
echo "如有问题,使用 /deploy/rollback.sh 回滚"
命令文档化
创建命令目录
<!-- .claude/commands/README.md -->
# Slash 命令文档
## 概述
本目录包含团队常用的Slash命令,用于标准化开发流程。
## Git命令
### `/git start-day`
每日开始工作,同步代码并查看待办事项。
```bash
/git start-day
/git end-day
每日结束工作,检查变更并准备次日工作。
/git end-day
/commit <message>
自动提交代码,包含lint和测试。
/commit "修复登录页面验证码bug"
Pull Request命令
/pr create
创建Pull Request。
/pr create
/pr review
审查待处理的Pull Request。
/pr review
部署命令
/deploy staging
部署到预发布环境。
/deploy staging
/deploy production
部署到生产环境(需要确认)。
/deploy production
开发命令
/dev new-component <name>
创建新的React/Vue组件。
/dev new-component Button
/dev new-api <name>
创建新的API端点。
/dev new-api user/login
添加新命令
- 在
.claude/commands/目录下创建.sh文件 - 添加正确的文件头(名称、描述、用法)
- 设置可执行权限:
chmod +x .claude/commands/your-command.sh - 更新本文档
## 权限与安全
### 设置命令权限
在`settings.json`中配置命令的执行策略:
```json
{
"commands": {
"permissions": {
"commit": "auto", // 自动执行
"deploy": "confirm", // 需要确认
"cleanup": "confirm", // 需要确认
"destructive": "prompt" // 每次询问
},
"allowed_commands": [
"commit",
"test",
"status",
"help"
],
"blocked_commands": [
"delete_all",
"force_push"
]
}
}
敏感操作处理
#!/bin/bash
# .claude/commands/sensitive.sh
# 检查是否是危险操作
if [[ "$1" == "--force" ]]; then
echo "⚠️ 检测到强制操作请求"
echo ""
echo "此操作可能造成数据丢失,请联系管理员执行。"
exit 1
fi
# 记录敏感操作
log_sensitive_action() {
local action="$1"
local user="$USER"
local time=$(date +"%Y-%m-%d %H:%M:%S")
local ip=$(who am i | awk '{print $NF}' || echo "unknown")
echo "[$time] 用户=$user IP=$ip 操作=$action" >> /var/log/claude-commands.log
}
log_sensitive_action "sensitive_command"
最佳实践
1. 命令设计原则
- 单一职责:每个命令只做一件事
- 幂等性:多次执行结果相同
- 清晰的反馈:让用户知道发生了什么
- 错误处理:失败时有明确的错误信息
2. 命名规范
# ✅ 好的命名
commit.sh
create-pr.sh
run-tests.sh
# ❌ 不好的命名
do_stuff.sh
myscript.sh
test123.sh
3. 文档完善
- 每个命令都有清晰的描述
- 提供使用示例
- 说明前置条件
4. 版本控制
- 将命令纳入版本控制
- 记录命令的变更历史
- 定期审查和优化
结语
Slash命令是将团队最佳实践固化的最佳方式。当你创建一个命令时,你不仅在节省自己的时间,也在为整个团队创造可复用的知识资产。
从今天开始,观察你的日常工作中哪些操作是重复的,然后把它们变成Slash命令。随着命令库的丰富,你会发现开发工作变得越来越流畅,而团队的规范也越来越统一。
参考资源:
更多推荐


所有评论(0)