首页 > 解决方案 > 我怎样才能鼓掌来包装长的帮助信息?

问题描述

这是一个例子:

extern crate clap;
use clap::{Arg, App};

fn main() {
let args = App::new("test")
    .arg(Arg::with_name("scoring_method")
            .short("s")
            .long("scoring-method")
            .help("Very very very very very very long long long long long help help help help help message message message message message message message"))
    .get_matches();
}

导致帮助文本格式如下:

控制台示例

(在代码模式下粘贴会导致 Stack Overflow 修复格式问题)

产生的确切字符串是:

'USAGE:\n    play [FLAGS]\n\nFLAGS:\n    -h, --help              Prints help information\n    -s, --scoring-method    Very very very very very very long long long long long help help help help help message\n                            message message message message message message\n    -V, --version           Prints version information'

标签: rust

解决方案


Clap 有一个max_term_width用于包装它输出的文本。如该文档中所述,它默认为120字符,这就是为什么您最终会看到文本拆分,但不是您希望的地方。

如果您想设置某个宽度,可以使用带有特定值的set_term_width 。或者,您可以使用像terminal_size这样的板条箱来获取当前终端的大小,并使用它来设置clap要使用的宽度。

作为一个完整的例子:

extern crate clap;
extern crate terminal_size;

use clap::{App, Arg};
use terminal_size::{terminal_size, Width};

fn main() {
    let args = App::new("test")
    .set_term_width(if let Some((Width(w), _)) = terminal_size() { w as usize } else { 120 })
    .arg(Arg::with_name("scoring_method")
      .short("s")
      .long("scoring-method")
      .help("Very very very very very very long long long long long help help help help help message message message message message message message"))
    .get_matches();
}

推荐阅读