GitHub_Trending/au/autocomplete开发实战:3分钟创建自定义命令补全规则
你是否曾在终端中输入命令时反复查阅文档?是否希望像使用IDE一样获得智能提示?本文将带你使用GitHub_Trending/au/autocomplete项目,在3分钟内为任意命令创建自定义补全规则,彻底告别命令记忆负担。
核心概念:什么是补全规则(Completion Spec)
补全规则(Completion Spec)是一种声明式的JSON模式,用于定义命令行工具的子命令、选项和参数。Amazon Q(原Fig)利用这些规则为终端提供类似IDE的自动补全功能,支持数百种常见CLI工具如git、npm和docker。
每个补全规则文件通常包含以下核心结构:
- 命令元信息:名称、描述和图标
- 子命令定义:嵌套的命令层级结构
- 选项配置:支持的标志和参数
- 参数生成器:动态提供上下文相关的参数建议
项目中已为400+命令提供补全规则,例如src/git.ts实现了Git命令的完整补全逻辑,包括分支、提交和文件路径的智能提示。
环境准备:3步搭建开发环境
安装依赖工具
确保系统已安装Node.js和pnpm:
# 安装pnpm(如未安装)
npm install -g pnpm
# 克隆项目仓库
git clone https://gitcode.com/GitHub_Trending/au/autocomplete.git
cd autocomplete
# 安装项目依赖
pnpm install
启动开发模式
# 创建示例补全规则(以"mycli"为例)
pnpm create-spec mycli
# 启动开发模式(实时编译和测试补全规则)
pnpm dev
开发模式启动后,修改补全规则文件会自动编译到build/目录,终端会实时加载最新规则。
实战开发:创建自定义补全规则
基础结构解析
创建的规则文件位于src/mycli.ts,基础结构如下:
const completionSpec: Fig.Spec = {
name: "mycli",
description: "我的自定义命令行工具",
subcommands: [
{
name: "hello",
description: "打印问候语",
args: {
name: "名称",
description: "要问候的人",
isOptional: true,
},
},
],
options: [
{
name: ["-h", "--help"],
description: "显示帮助信息",
},
],
};
export default completionSpec;
添加动态参数生成器
为命令添加智能参数建议,例如让mycli deploy命令自动提示可用服务器:
// 在subcommands数组中添加
{
name: "deploy",
description: "部署应用到服务器",
args: {
name: "服务器",
description: "目标服务器",
generators: {
script: ["echo", "server1\nserver2\nserver3"],
postProcess: (out) => {
return out.split("\n").map(server => ({
name: server,
icon: "fig://icon?type=server",
description: "可用服务器"
}));
}
}
}
}
这段代码会在输入mycli deploy时自动显示服务器列表,类似src/git.ts中Git分支补全的实现方式。
测试自定义补全
在终端中输入以下命令测试效果:
# 触发基础补全
mycli [空格]
# 测试子命令补全
mycli hello [空格]
# 测试动态参数补全
mycli deploy [空格]
开发过程中可通过pnpm test命令验证规则语法正确性,确保符合项目规范。
高级技巧:提升补全体验
添加图标和颜色标识
通过icon属性为不同类型的建议添加视觉区分:
{
name: "config.json",
icon: "fig://icon?type=json&color=00ff00",
description: "配置文件"
}
项目中src/git.ts使用这种方式为Git状态文件添加不同颜色标识。
使用条件建议
根据上下文提供不同补全选项,例如只有添加--force选项时才显示危险操作:
{
name: "delete",
description: "删除资源",
options: [
{
name: "--force",
description: "强制删除",
},
],
args: {
name: "资源ID",
description: "要删除的资源ID",
isDangerous: true,
dependsOn: ["--force"], // 仅当--force存在时显示
},
}
集成系统命令输出
通过脚本获取系统信息作为补全源,例如列出当前目录文件:
generators: {
script: ["ls", "-la"],
postProcess: (out) => {
return out.split("\n").map(line => ({
name: line.split(/\s+/).slice(-1)[0],
description: "文件系统项"
}));
}
}
部署与分享
本地测试验证
开发完成后,通过以下步骤验证补全效果:
- 确保
pnpm dev处于运行状态 - 在新终端中测试所有命令组合
- 使用
q doctor命令诊断潜在问题
贡献到开源社区
如需将自定义补全规则贡献给项目:
- 遵循CONTRIBUTING.md指南
- 确保代码通过
pnpm lint:fix检查 - 提交Pull Request到官方仓库
常见问题解决
补全不生效怎么办?
- 检查开发模式是否运行:
pnpm dev - 验证文件是否编译:查看
build/mycli.js是否存在 - 运行诊断命令:
q doctor - 重启终端或刷新补全缓存
如何调试补全规则?
- 使用
console.log()在生成器函数中输出调试信息 - 查看实时编译日志:
pnpm dev的输出 - 检查浏览器开发者工具:Amazon Q应用提供调试界面
总结与扩展学习
通过本文你已掌握:
- ✅ 创建基础补全规则的完整流程
- ✅ 添加动态参数生成器的方法
- ✅ 测试和调试补全规则的技巧
项目中还有更多高级特性等待探索:
- 正则表达式参数验证
- 嵌套子命令的复杂结构
- 与系统环境变量的集成
查看src/git.ts等成熟规则文件,获取更多实战灵感。现在就为你常用的命令创建补全规则,让终端操作效率提升10倍!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



