部分的な部分文字列で Bash エイリアス補完を取得する方法は何通りありますか?
-
21-08-2019 - |
質問
質問: 質問があります。 このすでに尋ねられた 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 の入力を自動化.