0

質問:スタック オーバーフローで既に尋ねられているこの Bash 補完の質問では明らかに答えられていない質問があります。問題は、部分文字列で Bash エイリアスの補完を (任意のエイリアスに対して) 取得する方法です。

例: たとえば、次のエイリアスがあるとします。

open.alicehome="cd /usr/home/alice"
open.bakerhome="cd /usr/home/baker"
open.charliehome="cd /usr/home/charlie"
gohomenow="shutdown -now"

怠惰に「baker{{TAB}}」と入力して、2 番目のエイリアスを呼び出したいと思います。

怠惰に「home{{TAB}}」と入力して上記のすべてのエイリアスのリストを取得し、キーボードで選択するか (最適)、3 つのオプションを区別する明確な部分文字列を入力して選択します。 (最適ではありません)。

.. また ..

怠惰に「ホーム」と入力し、目的のエイリアスが表示されるまで {{TAB}} を繰り返し押してから、{{ENTER}} を押して実行したいと思います。

自由に創造力を働かせてください: これを行う方法があれば、それが極端なグル ハッカーに頼る必要がある場合でも、遠慮なく共有してください。あなたのグル ハッカーを 5 歳児のレベルまで自由に説明してください。あなたのアイデアを自分で実装しようとする必要があります。

既存の Web ページまたは RTFM へのリンクは大歓迎です。

4

3 に答える 3

2

bash本当にのタブの動作を変更したい場合は、

# ~/.inputrc
# The default binding for [Tab] is ``complete'', which is what we're used to.
# ``menu-complete'' gives you irssi-like behavior: cycle through completions.
"\t": menu-complete

これはThe GNU Readline Library #Letting Readline Type For Youに記載されています。

于 2009-02-04T22:15:59.493 に答える
1

おそらく、カスタムのbash_completion設定で目的を達成できますが、私はあなたのために仕事をするつもりはありません。:-)

私が何について話しているのかわからない場合は、ここここで詳細を参照してください。ちなみに、これはとても迷惑だと思います

怠惰に「home」と入力し、目的のエイリアスが表示されるまで{{TAB}}を繰り返し押してから、{{ENTER}}を押して実行します。

これは「完了」のM$スタイルだと思います(DOS / Windows環境に来るのですか?)

于 2009-02-04T20:40:14.537 に答える
1

指定された部分文字列の一致を生成するには、compgen -c -X'!*substring*'

これをbashオートコンプリートに含めるには、次のようなものを含む.bash_completionファイルをホームディレクトリに作成します。

_comp() {
    local cur

    cur=${COMP_WORDS[$COMP_CWORD]}

    COMPREPLY=( $( compgen -c -X '!*'$cur'*' ) )

}
complete -F _comp $nospace eval

<TAB>この一致関数は、コマンドの引数を押すと実行されますeval。bashの最初のコマンド検索に新しいマッチング関数を含める方法は見つかりませんでしたeval。上記のように、特定のコマンドにカスタム補完を追加する方法に関するドキュメントしか見つかりませんでした。

しかし、これがどれほど役立つかについては少し懐疑的です...リストから必要な一致を選択する簡単な方法はありません。

于 2009-02-05T08:51:24.670 に答える