4

我在 Perl 中使用Term::Shell包来实现 CLI 工具。我无法用它来完成命令部分的制表符完成。

comp_CMD() - 这是这个 Term::Shell 提供的一个 API,用于实现 tab 补全。这对我没有帮助。有谁知道如何使这项工作?

示例代码:

#!/usr/bin/env perl
package Sample;
use base qw(Term::Shell);

sub prompt_str { "Sample\>" };

sub comp_show
{
    my $o = shift;
    my $word = shift;
    $o->completions($word, [qw(all work and no play is no fun at)]);
}

sub run_show
{
        print "run show\n";
}

package main;
Sample->new->cmdloop;

这是程序的运行:

Sample>show[TAB] 

上面的命令没有给出预期的输出。它只是给了我一个标签。

4

3 回答 3

6

确保您安装了Term::ReadLine::GnuTerm::ReadLine::Perl

于 2009-07-23T11:33:57.987 回答
2

你的样品对我有用。"show" 和它的论点都完成了。

在你输入“show”之后,没有什么要完成的了,它已经是一个完整的命令了。要完成第一个参数,您至少必须提供它的第一个字母;因此,在显示后立即键入 <TAB> 只能将您带到必须键入要完成的参数的第一个字母的地方。如果您连续按两次 <TAB>,您将看到可用的补全。

我发现唯一奇怪的是,如果只有一个可能的参数要完成,它不会自动完成。您仍然必须提供第一个字母。这有点奇怪,但也许只是实施者的疏忽。

于 2009-07-23T11:05:05.673 回答
0

首先,我没有得到“添加评论”按钮..所以我发布作为答案。

我试过这样:

sample> sh"TAB"

sample>show w"TAB"

没有任何效果。

跟环境有关系吗?或者是其他东西?

于 2009-07-23T11:31:42.377 回答