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.

UAdapter
quelle

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"
Jjed
quelle
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
2

Sie können versuchen, mit compgen.

Beispielsweise:

compgen -ac | grep "svn"
Rajesh Pantula
quelle
1

Dies sollte gleichbedeutend sein:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
Totaam
quelle
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.

Oli
quelle
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.

Mathematik
quelle
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 /.
Benutzer unbekannt
quelle