Skip to content

自定义命令

自定义命令让你可以将最常用的提示保存为个人快捷方式。你可以创建特定于单个项目的命令,或在所有项目中全局可用的命令。

文件位置和优先级

Gemini CLI 从两个位置发现命令:

  1. 用户命令(全局): 位于 ~/.gemini/commands/。这些命令在任何项目中都可用。
  2. 项目命令(本地): 位于 <your-project-root>/.gemini/commands/。这些命令特定于当前项目。

如果项目目录中的命令与用户目录中的命令同名,项目命令将始终被使用

命名和命名空间

命令的名称由其相对于 commands 目录的文件路径决定。子目录用于创建命名空间命令,路径分隔符转换为冒号(:)。

  • ~/.gemini/commands/test.toml 变成命令 /test
  • <project>/.gemini/commands/git/commit.toml 变成命名空间命令 /git:commit

TOML 文件格式

命令定义文件必须使用 TOML 格式和 .toml 文件扩展名。

必需字段

  • prompt(字符串):执行命令时发送给 Gemini 模型的提示

可选字段

  • description(字符串):命令功能的简短描述,显示在 /help 菜单中

处理参数

1. 使用 的上下文感知注入

如果 prompt 包含 占位符,CLI 将用用户在命令名后输入的文本替换它。

示例(git/fix.toml):

toml
# 调用方式:/git:fix "Button is misaligned"

description = "为给定问题生成修复。"
prompt = "请为这里描述的问题提供代码修复:{{args}}。"

2. 默认参数处理

如果 prompt 不包含 ,CLI 会将你输入的完整命令附加到提示末尾。

3. 使用 !{...} 执行 Shell 命令

你可以通过在 prompt 中执行 shell 命令并注入其输出来使命令动态化。

示例(git/commit.toml):

toml
description = "根据暂存的更改生成 Git 提交消息。"

prompt = """
请根据以下 git diff 生成一个 Conventional Commit 消息:

```diff
!{git diff --staged}

"""


### 4. 使用 `@{...}` 注入文件内容

使用 `@{...}` 语法将文件内容直接嵌入到提示中。

- **文件注入**:`@{path/to/file.txt}` 被替换为文件内容
- **目录列表**:`@{path/to/dir}` 遍历目录并插入所有文件
- **多模态支持**:支持图像、PDF、音频和视频文件

**示例(`review.toml`):**

```toml
description = "使用最佳实践指南审查提供的上下文。"
prompt = """
你是一位专业的代码审查员。

你的任务是审查 {{args}}。

审查时请使用以下最佳实践:

@{docs/best-practices.md}
"""

示例:创建重构命令

1. 创建文件和目录:

bash
mkdir -p ~/.gemini/commands/refactor
touch ~/.gemini/commands/refactor/pure.toml

2. 添加内容:

toml
# 在:~/.gemini/commands/refactor/pure.toml
# 调用方式:/refactor:pure

description = "要求模型将当前上下文重构为纯函数。"

prompt = """
请分析我在当前上下文中提供的代码。
将其重构为纯函数。

你的响应应包括:
1. 重构后的纯函数代码块。
2. 简要说明你所做的关键更改以及它们如何有助于纯度。
"""

3. 运行命令:

> @my-messy-function.js
> /refactor:pure

aicodex 文档网站