部分的な部分文字列で Bash エイリアス補完を取得する方法は何通りありますか?

StackOverflow https://stackoverflow.com/questions/509427

質問

質問: 質問があります。 このすでに尋ねられた 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 つのオプションを区別する明確な部分文字列を入力して選択したいと考えています。 (最適とは言えません)。

..または ..

「home」とゆっくり入力し、必要な特定のエイリアスが表示されるまで {{TAB}} を繰り返し押し、それから {{ENTER}} を押して実行したいと思います。

自由に創造力を発揮してください:これを行う方法がある場合は、たとえそれが極端な教祖ハッカリーに頼る必要がある場合でも、お気軽に共有し、自分の教祖ハッキングを実装しようとする 5 歳児のレベルまで遠慮なく説明してください。あなた自身のアイデア。

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

役に立ちましたか?

解決

次のコマンドを使用して、指定した部分文字列の一致を生成できます。 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 その上。

でも、これがどれほど役に立つのかはちょっと疑問です…。リストから希望の一致を選択する簡単な方法はありません。

他のヒント

本当に変わりたいなら 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

これは次の文書に記載されています GNU Readline ライブラリ # Readline の入力を自動化.

おそらく、カスタムの bash_completion 設定を使用して希望する内容を達成できるでしょう。しかし、私はあなたの代わりにその仕事をするつもりはありません。:-)

何のことを言っているのか分からない場合は、こちらをご覧ください ここ そして ここ 詳細については。ちなみに、これは非常に迷惑だと思います

「ホーム」と入力するだけで、{{{tab}}}を繰り返し押してください。必要な特定のエイリアスが表示され、{{enter}}を押して実行します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top