Wie kann ich die Tab-Vervollständigungsmöglichkeiten durchgehen?


18

Wenn ich in einer Konsole die Tabulatortaste drücke, erhalte ich diese Ausgabe

Alle 2957 Möglichkeiten anzeigen? (J oder N)

Gibt es eine Möglichkeit, grepdiese 2957-Möglichkeiten zu nutzen? Ich möchte nach allen Befehlen mit dem Wort "svn" suchen.

Antworten:


21

Die Lösung ist die Bash Builtin compgen. Geben Sie Folgendes ein, um 'svn' von allen verfügbaren Befehlen und Befehlsaliasnamen zu lesen, auf die über zugegriffen werden $PATHkann.

compgen -ac | grep svn

Möchten Sie nach einem bestimmten Präfix suchen (z. B. nach allen Befehlen, die mit beginnen ecrypt)? Verwenden Sie reguläre Ausdrücke. .

compgen -ac | grep "^ecrypt"

ausgezeichnete Antwort, aber was ist, wenn man selbst die Möglichkeiten der Tab-Vervollständigung prüfen möchte? Ich meine, es wird nicht immer durch den Befehlsnamen ausgelöst, sondern auch durch Befehlsparameter usw.
UncleZeiv


1

Dies sollte gleichbedeutend sein:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done

1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

Abgesehen davon ist die Antwort von Totaam sehr ähnlich und beschränkt sich auf ausführbare Dateien (wie Bash). Aber JJEs compgenist eine weitere Meile besser.


1

vielleicht {,.}*svn*hilft hier zb ls -l /usr/bin/{,.}*svn*<tab>.

Schauen Sie doch mal auf die Zsh! Hier: http://www.jukie.net/bart/blog/zsh-tab-completion sind einige gute Beispiele dafür, wie Sie die Ergebnisse der Tab-Vervollständigung reduzieren können. Dies schließt auch die Negation ein, z. B. wenn Sie alle Ergebnisse der Tabulatorvervollständigung ohne das Wort "foobar" oder alle Ergebnisse mit geraden Ziffern an erster Stelle, die Tabulatorvervollständigung im Unterverzeichnis und vieles mehr wünschen. Der Grund, warum ich zu zsh gewechselt bin, war die gemeinsame Nutzung der Historie zwischen allen offenen Terminals.


0

Ich kannte compgen nicht und hätte vorgeschlagen:

ls -d ${PATH//:/\/*svn* } 2>/dev/null

für bash.

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.