golang多shell多命令参数自动补全插件carapace-bin的使用
golang多shell多命令参数自动补全插件carapace-bin的使用
简介
carapace-bin 是一个为多种 CLI 命令提供参数自动补全功能的 Golang 工具,支持多种 POSIX 和非 POSIX shell。
支持的Shell
- Bash
- Cmd (实验性)
- Elvish
- Fish
- Ion (实验性)
- Nushell
- Oil
- Powershell
- Tcsh (实验性)
- Xonsh
- Zsh
快速开始
安装
可以通过以下方式安装 carapace-bin:
# 使用go install安装
go install github.com/carapace-sh/carapace-bin/cmd/carapace@latest
# 或者使用brew安装
brew install carapace
基本使用示例
下面是一个简单的示例,展示如何为自定义命令添加自动补全功能:
package main
import (
"github.com/carapace-sh/carapace-bin/pkg/actions"
"github.com/carapace-sh/carapace-bin/pkg/actions/os"
"github.com/carapace-sh/carapace-bin/pkg/carapace"
"github.com/spf13/cobra"
)
func main() {
var rootCmd = &cobra.Command{
Use: "mycmd",
Short: "A demo command with carapace completion",
}
// 添加子命令
var subCmd = &cobra.Command{
Use: "sub",
Short: "A subcommand",
Run: func(cmd *cobra.Command, args []string) {
// 命令逻辑
},
}
// 添加带补全的flag
subCmd.Flags().StringP("file", "f", "", "specify a file")
carapace.Gen(subCmd).FlagCompletion(carapace.ActionMap{
"file": carapace.ActionFiles(), // 文件自动补全
})
// 添加带补全的位置参数
subCmd.Flags().StringP("user", "u", "", "specify a user")
carapace.Gen(subCmd).FlagCompletion(carapace.ActionMap{
"user": os.ActionUsers(), // 用户自动补全
})
rootCmd.AddCommand(subCmd)
// 执行命令
carapace.Gen(rootCmd).Root().Execute()
}
为现有命令添加补全
carapace-bin 已经为许多常用命令提供了内置补全支持。要为这些命令启用补全,只需运行:
# 为git命令启用补全
carapace --setup git
# 为docker命令启用补全
carapace --setup docker
自定义补全示例
下面是一个更复杂的自定义补全示例:
package main
import (
"github.com/carapace-sh/carapace-bin/pkg/actions"
"github.com/carapace-sh/carapace-bin/pkg/carapace"
"github.com/spf13/cobra"
)
func main() {
var rootCmd = &cobra.Command{
Use: "complex",
Short: "A command with complex completion",
}
var subCmd = &cobra.Command{
Use: "action",
Short: "Perform an action",
Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) {
// 命令逻辑
},
}
// 自定义补全函数
carapace.Gen(subCmd).PositionalCompletion(
carapace.ActionCallback(func(c carapace.Context) carapace.Action {
// 根据上下文动态生成补全选项
return carapace.ActionValuesDescribed(
"start", "Start the service",
"stop", "Stop the service",
"restart", "Restart the service",
"status", "Show service status",
)
}),
)
// 带条件的补全
subCmd.Flags().StringP("type", "t", "", "specify type")
carapace.Gen(subCmd).FlagCompletion(carapace.ActionMap{
"type": carapace.ActionValues("dev", "prod", "test"),
})
// 根据flag值改变位置参数的补全
carapace.Gen(subCmd).PositionalAnyCompletion(
carapace.ActionCallback(func(c carapace.Context) carapace.Action {
if typeFlag := subCmd.Flag("type").Value.String(); typeFlag != "" {
switch typeFlag {
case "dev":
return carapace.ActionValues("debug", "log", "trace")
case "prod":
return carapace.ActionValues("deploy", "rollback", "scale")
case "test":
return carapace.ActionValues("unit", "integration", "e2e")
}
}
return carapace.ActionValues()
}),
)
rootCmd.AddCommand(subCmd)
carapace.Gen(rootCmd).Root().Execute()
}
高级功能
carapace-bin 还支持更高级的功能,如:
- 多级补全
- 依赖补全
- 动态补全
- 条件补全
可以通过官方文档了解更多高级用法。
更多关于golang多shell多命令参数自动补全插件carapace-bin的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang多shell多命令参数自动补全插件carapace-bin的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用 carapace-bin 实现 Golang 多命令参数自动补全
carapace-bin 是一个强大的命令行参数自动补全工具,专为 Golang 程序设计,支持多种 shell(包括 bash、zsh、fish 和 powershell)。下面我将详细介绍如何使用它。
安装 carapace-bin
首先安装 carapace-bin:
go install github.com/rsteube/carapace-bin/cmd/carapace@latest
基本使用示例
1. 为你的 CLI 程序添加补全支持
假设你有一个 Golang CLI 程序,下面是如何为其添加补全支持:
package main
import (
"github.com/rsteube/carapace"
"github.com/rsteube/carapace-bin/pkg/actions/tools/git"
"github.com/spf13/cobra"
)
func main() {
var rootCmd = &cobra.Command{
Use: "mycli",
Short: "A demo CLI with autocompletion",
}
var cloneCmd = &cobra.Command{
Use: "clone",
Short: "Clone a repository",
Run: func(cmd *cobra.Command, args []string) {
// 实际命令逻辑
},
}
// 为 clone 命令添加自动补全
carapace.Gen(cloneCmd).PositionalCompletion(
git.ActionRepositorySearch(git.SearchOpts{}.Default()),
)
rootCmd.AddCommand(cloneCmd)
rootCmd.Execute()
}
2. 生成补全脚本
为你的 shell 生成补全脚本:
# 为 bash 生成
carapace --bash your-cli-program > ~/.bash_completion.d/your-cli-program
# 为 zsh 生成
carapace --zsh your-cli-program > ~/.zsh/completion/_your-cli-program
然后在你的 shell 配置文件中加载它。
高级功能
1. 多级命令补全
var subCmd = &cobra.Command{
Use: "sub",
Short: "Subcommand",
}
var subSubCmd = &cobra.Command{
Use: "subsub",
Short: "Sub-subcommand",
}
carapace.Gen(subSubCmd).PositionalCompletion(
carapace.ActionValues("value1", "value2", "value3"),
)
subCmd.AddCommand(subSubCmd)
rootCmd.AddCommand(subCmd)
2. 带标志的补全
var listCmd = &cobra.Command{
Use: "list",
Short: "List items",
}
listCmd.Flags().StringP("filter", "f", "", "Filter items")
carapace.Gen(listCmd).FlagCompletion(carapace.ActionMap{
"filter": carapace.ActionValues("all", "active", "inactive"),
})
3. 动态补全
carapace.Gen(rootCmd).PositionalCompletion(
carapace.ActionCallback(func(c carapace.Context) carapace.Action {
// 这里可以添加动态生成补全选项的逻辑
return carapace.ActionValues("dynamic1", "dynamic2")
}),
)
集成现有补全
carapace-bin 已经为许多常见工具(如 git、docker、kubectl 等)内置了补全规则:
carapace.Gen(rootCmd).PositionalCompletion(
docker.ActionRepositories(),
)
测试补全
安装后,你可以这样测试:
# 在 bash 中
source ~/.bash_completion.d/your-cli-program
your-cli-program <TAB>
# 在 zsh 中
autoload -U compinit && compinit
your-cli-program <TAB>
最佳实践
- 为所有命令和子命令添加补全
- 为所有标志添加补全
- 使用有意义的补全值
- 考虑使用动态补全获取最新数据
- 为你的用户提供清晰的安装说明
carapace-bin 的强大之处在于它可以为复杂的 CLI 应用程序提供智能的、上下文感知的补全,大大提升了用户体验。