Angegebene absolute Verzeichnisse mit Tab-Vervollständigung ignorieren?

Angegebene absolute Verzeichnisse mit Tab-Vervollständigung ignorieren?

Ich arbeite an einem Cluster mit vielen Benutzern. Es gibt 50 Benutzer im Cluster, deren erster Buchstabe mit meinem Benutzernamen übereinstimmt, und einen Benutzer, der bis zum letzten Buchstaben denselben Namen hat. Wenn ich mit der Tabulatortaste vervollständige, /home/emöchte ich nur sehen /home/elsherbini/, anstatt noch ein paar Zeichen eingeben zu müssen, dann mit der Tabulatortaste und dann den letzten Buchstaben eingeben zu müssen.

Es scheint, dass FIGNORE nicht mit absoluten Pfaden funktioniert, sondern nur mit Dateisuffixen. Gibt es eine Möglichkeit, eine kuratierte Liste von Verzeichnissen für die Tab-Vervollständigung zu ignorieren?

GNU Bash, Version 4.1.2(1)-Release (x86_64-redhat-linux-gnu)

Antwort1

Ich würde beispielsweise Folgendes vorschlagen: aliasWenn es uns nur um den Verzeichnispfad geht home, würde es helfen, Folgendes hinzuzufügen profile: Egal, welchen eindeutigen Alias ​​Sie erstellt haben, er sollte sogar mit dem ersten Buchstaben automatisch vervollständigt werden.

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

BEARBEITEN:

Der andere Weg könnte seineinen Schlüssel bindenaber selbst dies würde ein schnelles double clickund erfordern right click, unter Berücksichtigung Ihrer Verwendung in PuTTY, falls dies hilft.

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

Bei Verwendung von Control-Hwird Ihre benutzerdefinierte Zeichenfolge abgefragt, beispielsweise Ihr Benutzername. Verwendung:

$ cd
elsherbini

Antwort2

Ich verwende zsh, wodurch die Vervollständigung sehr detailliert angepasst werden kann. Diese Option verhindert die Vervollständigung bestimmter Muster:

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"

Antwort3

Sie können die integrierte Funktion compgenfür einfache Verzeichnisvervollständigungen überschreiben (wie für cdund ls). Fügen Sie diese Funktion beispielsweise in Ihre ~/.bashrc ein.

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"
}

Es führt das integrierte Programm aus compgenund filtert die Ausgabe so, dass alle Zeilen, die mit dem regulären Ausdruck beginnen ^/home/eund nicht übereinstimmen, ^/home/elsherbini$aus der Liste der möglichen Vervollständigungen entfernt werden. Beachten Sie, dass die regulären Ausdrücke darin nicht in Anführungszeichen gesetzt sind [[]].

verwandte Informationen