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

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

私は多くのユーザーがいるクラスタで作業しています。クラスタには、最初の文字が私のユーザー名と同じユーザー50人を持ち、最後の文字まで同じ名前を持つユーザーが50人います。 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$正規表現はで引用されません[[]]

関連情報