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/e
mö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: alias
Wenn 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 click
und 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-H
wird 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 compgen
für einfache Verzeichnisvervollständigungen überschreiben (wie für cd
und 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 compgen
und filtert die Ausgabe so, dass alle Zeilen, die mit dem regulären Ausdruck beginnen ^/home/e
und 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 [[]]
.