在golang的flag中添加bash completion (補完)功能

要在Golang中接收命令行参数,基本方法是使用标准的flag包。通常我会使用kingpin,它会默认内置Bash/ZSH Shell自动完成功能,但是flag包中并没有这个功能。

实际上,在flag上添加bash完成(命令补全)可能并没有太多优点,但这也是我为了练习golang和bash而制作的。

目标

我要介绍一个名为flagcmpl的工具,它可以向flag包添加bash自动补全功能。

    https://github.com/sago35/flagcmpl

使用方法 (shǐ fǎ)

突然来了,使用方法。

    1. 增加 “github.com/sago35/flagcmpl” 的导入

将使用 flag.Parse() 的部分改为 flagcmpl.Parse()

在 bash_profile 等文件中执行 eval “$(your-cli-tool –completion-script-bash)”

将flagcmpl.Parse()改写为flagcmpl.解析()

首先,将希望进行bash自动补全的Golang源代码中的flag.Parse()替换为flagcmpl.Parse()。

package main

import "flag"
import "github.com/sago35/flagcmpl"

var verbose = flag.Bool("verbose", false, "Verbose mode.")

func main() {
    // flag.Parse() を↓に書き換える
    flagcmpl.Parse()
}

如果您想补充完整的golang源代码,而它使用了flag.FlagSet(),则可以按以下方式进行修改。

package main

import (
    "flag"
    "github.com/sago35/flagcmpl"
    "os"
)

func main() {
    flags := flag.NewFlagSet("sample2", flag.ExitOnError)
    flags.Bool("verbose", false, "Verbose mode.")

    // flags.Parse(os.Args[1:]) を↓に書き換える
    flagcmpl.ParseFlagSet(os.Args[0], flags, os.Args)
}

在Bash中添加自动补全功能

如果您正在使用your-cli-tool创建东西,请执行 “eval “$(your-cli-tool –completion-script-bash)””。

展示

Windows上使用git bash的演示在这里。

sample3.gif

这里是用于Demo的源代码。

    https://github.com/sago35/flagcmpl/tree/master/sample3

整理

只需简单地将Bash自动补全功能添加到以上提到的内容中。

链接等

    • sago35/flagcmpl: A Go library to add bash completion to your cli-tool using flag

 

    • alecthomas/kingpin: A Go (golang) command line and flag parser

 

    • gif作成にはScreenToGifを使いました

NickeManarin/ScreenToGif: ScreenToGif allows you to record a selected area of your screen and save it as a gif or video.

广告
将在 10 秒后关闭
bannerAds