web-dev-qa-db-ja.com

「StartingWith」ではなく、すべての可能なファイルで「Contains」のようにBashタブのオートコンプリートを一致させる

TABのbashオートコンプリートをoh-my-zshのように動作させたい。

ケースを無視して、各タブのすべての可能性を循環させます。

現在、ディレクトリにLinuxCommandsという名前のフォルダがあり、Comm+TABと書いた場合、それはLinuxCommandsフォルダと一致しません。

現在の動作「filename contains keywords」ではなく、「filename starts with keywords」に基づいてフォルダ名とファイル名で入力されたキーワードに一致するようにbashの動作を変更する方法はありますか?

それはすべてbashなので、それは重要ではないと思います。念のため、MacOSSierraを使用しています。

更新1

現在、この変更のために~/.bashrcにこのコードがあります

    _cd_completion() {
        mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
    }
    complete -F _cd_completion cd

    # If ~./inputrc doesn't exist yet, first include the original /etc/inputrc so we don't override it
    if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
    # Add option to ~/.inputrc to enable case-insensitive tab completion
    bind 'set completion-ignore-case On'

    bind 'set show-all-if-ambiguous on'
    bind 'TAB:menu-complete'

タスクを個別に実行します。しかし、統合されたパフォーマンスは奇妙です。オートコンプリートし、ディレクトリの1レベル遅れたオートコンプリート後に、同じフォルダの内容を循環します。

例:Folder1、Something2、NewFolder3があり、cd F+TABを押すと、> cd Folder1/が表示され、もう一度TABを押すと、> cd Folder1/Something2が表示されます。時間は> cd Folder1/NewFolder3を示し、このように前のレベルのフォルダーを循環し続けます。

6
Keyur Golani

~/.bashrcに独自のbash_completionルールを追加して、次のコードをファイルに追加できます。

_cd_completion() {
    mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _cd_completion cd

次に、端末を再起動するか、次のコマンドを入力する必要があります:source ~/.bashrc

システム全体に設定したい場合は、ファイル/ usr/share/bash-completion/completeions/cd内のbash_completionにルールを追加することもできます。

3
switch87