web-dev-qa-db-ja.com

文字列の補完をstdoutに出力する方法は?

一部のgitコマンドには多くのオプションがあり、必要なものを検索すると便利なことがよくあります。私は、 TABgit-guiの幅ですが、git configには約200の補完があります。明らかな回避策は、すべての補完をエディターにコピーして検索することですが、私はむしろそうします

[something] | grep tab

maninfoまたはcompgenページはなく、help compgenは独自のオプションについても説明しておらず、compgen(皮肉なことにどうですか?).

PS: compgen -A は機能しません。

PPS:これはgit-guiについての質問ではありません-- タブ幅の質問の解決策 は他の場所にありました。

PPPS:これはnotコマンドのオートコンプリートについてであり、コマンドパラメータのみです。

15
l0b0

次の関数を使用できます。これらの関数は、Sudoオートコンプリートが完了リストを生成するのと同じ方法を使用します。

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

どこ _command_offsetはbash-completion(パッケージ)で定義されています。

注:関数はインタラクティブシェルで実行する必要があります(つまり、ファイル内にある場合は、ファイルを実行するだけでなく、ソースにする必要があります)。または、必要な完了ルール/関数は定義されていません。

PS。 compgen -Aは組み込みのアクションに対してのみ機能します。試してみるべきだったのは(ただし、機能しません)compgen -F(または実際にはcompgen -o bashdefault -o default -o nospace -F _git)。これが機能しない理由(およびcompgen/completeを含むbash組み込みコマンドのドキュメント)は、 bash(1) にあります。

10
yuyichao