タブ補完で指定された絶対ディレクトリを無視しますか?

タブ補完で指定された絶対ディレクトリを無視しますか?

私は多くのユーザーを持つクラスターで作業しています。クラスターには、ユーザー名と同じ最初の文字を持つユーザーが 50 人いて、最後の文字まで同じ名前のユーザーが 1 人います。 から Tab 補完するときに、さらに数文字入力して Tab キーを押してから最後の文字を入力するのではなく、/home/eだけが表示されるようにしたいと思います。/home/elsherbini/

FIGNORE は絶対パスでは機能せず、ファイル サフィックスのみで機能するようです。タブ補完でディレクトリのキュレーション リストを無視する方法はありますか?

GNU bash、バージョン 4.1.2(1) リリース (x86_64-redhat-linux-gnu)

答え1

私が提案する 1 つの方法は、ディレクトリ パスaliasだけを気にするのであればhome、以下を追加するとprofile役立つでしょう。作成した一意のエイリアスは、最初の文字でも自動的に補完されるはずです。

alias myHome="cd /home/elsherbini"
. .profile
my\T
pwd
/home/elsherbini

編集:

もう一つの方法はキーのバインドしかし、 での使用状況を考慮すると、これもdouble clickまた迅速かつ が必要になります。これが役立つかどうかはわかりません。right clickPuTTY

completeIt(){ echo "elsherbini"; }
bind -x '"\C-h": completeIt;'

を使用するとControl-H、ユーザー名などのカスタマイズされた文字列がプロンプト表示されます。使用方法:

$ cd
elsherbini

答え2

私はzsh補完を非常に徹底的にカスタマイズできる を使用しています。このオプションは特定のパターンの補完を防止します:

autoload -Uz compinit; compinit
# ignore some common patterns that we usually don't want as completions
zstyle ':completion:*' ignored-patterns "/usr/share/iscan" "/usr/lib/iscan" \
        "iscan" "/usr/lib/ispell" "ispell" "/usr/lib64" "/usr/lib32" \
        "/usr/libx32" "/usr/libexec" "/srv/tftp" "chkwins" "dpkg-buildflags"

答え3

compgen単純なディレクトリ補完(および)のためにcd組み込み関数をオーバーライドすることができますls。たとえば、この関数を~/.bashrcに置きます。

compgen(){
    local IFS=$'\n'
    local x tmp
    x=$( builtin compgen "$@" ) &&
    while read -r tmp; do
        [[ "$tmp" =~ ^/home/e && ! "$tmp" =~ ^/home/elsherbini$ ]] ||
        echo "$tmp"
    done <<< "$x"
}

組み込み関数を実行しcompgenて出力をフィルタリングし、正規表現で始まり^/home/e一致しない行^/home/elsherbini$を補完候補のリストから削除します。正規表現は 内で引用符で囲まれていないことに注意してください[[]]

関連情報