首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使多个子命令执行相同的操作

如何使多个子命令执行相同的操作
EN

Stack Overflow用户
提问于 2022-09-20 15:21:09
回答 1查看 48关注 0票数 0
代码语言:javascript
复制
#[derive(Parser)]
struct Cli {
    #[clap(subcommand)]
    subcommand: Subcommand,
}


#[derive(clap::Subcommand)]
enum Subcommand {
    Index {
        #[clap(parse(from_os_str))]
        path: path::PathBuf,
    },
    Show {
        item: Option<String>,
    },
    Cd {
        term: String,
    },
    List,
    Init {
        shell: InitShell,
    },
    Search {
        term: Option<String>,
    },
    Add {
        category: String,
        title: String,
    },
}

fn main(){
    let cli = Cli::parse();

    match cli.subcommand{
        Subcommand::Index=>{/*code here*/}
        Subcommand::Show=>{/*and here*/}
        Subcommand::Display=>{/*and also here*/}
        Subcommand::Cd=>{}
        Subcommand::List=>{}
    // ... more matches
    }
}

当我使用--help运行我的程序时,子命令部分如下所示:

代码语言:javascript
复制
SUBCOMMANDS:
    add
    cd
    help
    index
    init
    list
    search
    show

我想定义一些别名,例如ls表示listdisplay表示show,这样帮助看起来如下所示:

代码语言:javascript
复制
SUBCOMMANDS:
    add
    cd, path
    help
    index
    init
    list, ls
    search
    show, display

我可以看到,在cargo build等于cargo b的情况下,货物会做类似的事情。

我查看了clap文档,并为builder找到了一个别名函数,但是我无法找到如何使用派生api来实现这一点。这是可能的吗?如果可能的话,我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-20 17:14:35

Clap派生文档,例如(在可能值属性下):

可能值属性 它们对应于一个PossibleValue原始属性: Any PossibleValue方法也可以用作属性,请参阅语法术语。

  • 例如,#[clap(alias("foo"))]将转换为pv.alias("foo")

你还说你希望化名出现在help下面。在这种情况下,您需要使用visible_alias来代替:

代码语言:javascript
复制
#[clap(visible_alias("foo"))]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73789062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档