6.3 自定义命令

OpenCode支持创建自定义斜杠命令,通过Markdown文件或JSON配置两种方式定义,让你可以快速执行常用的提示模板。

Markdown文件方式

Markdown方式是创建自定义命令最简单、最直观的方法。

文件位置

在以下位置创建.opencode/commands/目录:

  • 项目级.opencode/commands/(当前项目目录)
  • 用户级~/.config/opencode/commands/(全局可用)

基本格式

创建一个.md文件,文件名即为命令名:

# .opencode/commands/review.md

请审查以下代码,检查:

1. 代码质量和可读性
2. 潜在的bug和错误
3. 性能问题
4. 安全漏洞
5. 最佳实践遵循情况

$ARGUMENTS

使用:/review @src/main.ts

带Front Matter的格式

使用YAML front matter添加元数据:

# .opencode/commands/translate.md

---
description: 将代码注释翻译为中文
---

请将以下代码中的所有英文注释翻译为中文,保持代码不变:

$ARGUMENTS

复杂命令示例

# .opencode/commands/refactor.md

---
description: 重构代码以提高可维护性
---

请重构以下代码:

## 重构目标
- 提高代码可读性
- 减少重复代码
- 改善命名
- 优化结构

## 约束条件
- 保持公共API不变
- 不改变功能行为
- 添加必要的注释

$ARGUMENTS

JSON配置方式

JSON方式提供更多配置选项,适合需要复杂设置的命令。

在配置文件中定义

{
  "command": {
    "test": {
      "template": "为 $1 编写单元测试,使用 $2 测试框架",
      "description": "生成单元测试"
    },
    "doc": {
      "template": "为以下代码生成详细的文档注释:\n\n$ARGUMENTS",
      "description": "生成文档注释"
    }
  }
}

完整配置选项

{
  "command": {
    "analyze": {
      "template": "分析 $1 的代码复杂度和质量",
      "description": "代码分析",
      "hidden": false
    }
  }
}

模板变量

自定义命令支持多种模板变量:

变量说明示例
$ARGUMENTS所有输入参数/cmd hello worldhello world
$1第一个参数/cmd a b ca
$2第二个参数/cmd a b cb
$3 ... $9第3-9个参数同上
$FILE当前文件路径/path/to/current.ts
$SELECTION当前选中的文本IDE中选中的代码
$CLIPBOARD剪贴板内容复制的内容

变量使用示例

# 使用位置参数
# .opencode/commands/convert.md
将 $1 格式转换为 $2 格式:

$3

使用:/convert JSON YAML @config.json

# 使用多个变量
# .opencode/commands/compare.md
比较以下两个实现的优缺点:

## 实现A
$1

## 实现B
$2

请从性能、可读性、可维护性角度分析。

命令选项

description - 命令描述

在命令列表中显示的描述文本:

{
  "command": {
    "fix": {
      "template": "修复以下代码中的问题:\n$ARGUMENTS",
      "description": "修复代码问题"
    }
  }
}

hidden - 隐藏命令

命令不会在自动补全列表中显示,但仍可使用:

{
  "command": {
    "internal": {
      "template": "内部调试命令:$ARGUMENTS",
      "description": "内部使用",
      "hidden": true
    }
  }
}

实用示例

代码审查命令

# .opencode/commands/cr.md

---
description: 全面的代码审查
---

请对以下代码进行全面审查:

## 审查清单
- [ ] 代码逻辑正确性
- [ ] 错误处理完整性
- [ ] 边界条件处理
- [ ] 代码风格一致性
- [ ] 性能考量
- [ ] 安全性检查
- [ ] 测试覆盖建议

## 代码
$ARGUMENTS

请按照审查清单逐项给出评价和改进建议。

Git提交消息生成

# .opencode/commands/commit.md

---
description: 生成Git提交消息
---

基于以下代码变更,生成符合Conventional Commits规范的提交消息:

变更内容:
$ARGUMENTS

要求:
1. 使用正确的类型前缀(feat/fix/docs/style/refactor/test/chore)
2. 简洁描述变更内容
3. 必要时添加详细说明

API文档生成

# .opencode/commands/apidoc.md

---
description: 生成API文档
---

为以下API生成文档:

$ARGUMENTS

文档格式要求:
- 使用Markdown格式
- 包含端点描述
- 请求参数说明(包括类型、是否必需)
- 响应格式示例
- 错误码说明
- 使用示例

测试用例生成

{
  "command": {
    "test-unit": {
      "template": "为以下函数生成单元测试:\n\n$ARGUMENTS\n\n要求:\n- 使用 $1 测试框架\n- 覆盖正常情况和边界情况\n- 包含错误处理测试",
      "description": "生成单元测试"
    },
    "test-e2e": {
      "template": "为以下功能生成端到端测试:\n\n$ARGUMENTS\n\n要求:\n- 使用 Playwright/Cypress\n- 覆盖用户主要流程\n- 包含断言验证",
      "description": "生成E2E测试"
    }
  }
}

代码解释

# .opencode/commands/explain.md

---
description: 详细解释代码
---

请详细解释以下代码:

$ARGUMENTS

解释要求:
1. 整体功能概述
2. 逐行/逐块详细解释
3. 使用的设计模式或算法
4. 潜在的注意事项
5. 适合初学者理解的语言

性能优化建议

# .opencode/commands/perf.md

---
description: 性能优化建议
---

分析以下代码的性能,提供优化建议:

$ARGUMENTS

分析维度:
1. 时间复杂度
2. 空间复杂度
3. 内存使用
4. I/O操作
5. 并发处理

请提供具体的优化代码示例。

命令组织建议

组织技巧
  • 使用简短、有意义的命令名
  • 按功能分类命令(review、test、doc等)
  • 项目特定命令放在项目目录,通用命令放在用户目录
  • 为每个命令添加description,方便查找

查看已有命令

输入/后按Tab键可以查看所有可用命令,包括内置命令和自定义命令。

下一步

接下来学习MCP协议服务器,了解如何通过MCP扩展OpenCode的能力。