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
を示し、このように前のレベルのフォルダーを循環し続けます。
~/.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にルールを追加することもできます。