Smart Tab Vervollständigung (für Verzeichnisse)?

3130
dehmann

Gibt es Shell-Versionen mit einer intelligenteren Tab-Vervollständigung?

Ich würde gerne tippen können

cd foo-<TAB> 

Dann werden mir die möglichen Vervollständigungen zusammen mit Zahlen angezeigt, die ich eingeben kann, um eine davon auszuwählen:

cd foo-<TAB> (1) foo-bar1 (2) foo-bar2 (3) foo-bad 

Also, nachdem <TAB>ich getippt habe 3und es würde mich dazu bringen foo-bad. Alternativ wäre die Verwendung der Pfeiltasten anstelle der Eingabe der Zahl in Ordnung.

7

2 Antworten auf die Frage

10
Dennis Williamson

Sie können menu-completein Bash jedes Mal, wenn Sie die Tabulatortaste drücken, die Eingabe in der Befehlszeile schrittweise aktivieren . Das ist nicht wirklich das, wonach Sie suchen. Wenn Sie es ausprobieren möchten, führen Sie dies an der Eingabeaufforderung aus:

bind '"\C-i": menu-complete' 

Damit es dauerhaft bleibt, fügen Sie dies Ihrer ~/.inputrcDatei hinzu:

"\C-i": menu-complete 

Zsh verfügt über eine Funktion, mit der Sie einen Eintrag mit den Pfeiltasten auswählen können. Fügen Sie diese (oder eine andere Variante) zu Ihrer ~/.zshrcDatei hinzu:

zstyle ':completion:*' menu select=0 

Siehe man zshcompsysund die Suche nach „select =“ (es im Abschnitt für den sein wird menu„Standard Style“) für weitere Informationen.

Ansonsten könnten Sie in Bash eine Funktion schreiben (oder sogar eine eigene Beendigungsfunktion erstellen), die auf der Grundlage des selectBefehls etwas tut . Das ist extrem einfach:

$ select a in x y z; do cd $a; done 1) x 2) y 3) z #? 

Sie müssten viel ausarbeiten, um das zu tun, was Sie wollen.

Ich mag Ihre "Select" -Lösung. Genau das wollte ich! Ich habe nach "cd $ a" einen "break" hinzugefügt, und ich werde diesen Befehl als Alias ​​bezeichnen. Das ist viel besser als die Tab-Fertigstellung. dehmann vor 13 Jahren 0
@Dehman: Es ist Teil von "Fleisch, das raus". Sie brauchen eine "Pause" -Anweisung. Versuchen Sie: `Wählen Sie in xyz ein; mache cd $ a; brechen; fertig ". Sie können `find` verwenden, um eine Liste von Verzeichnissen zu erstellen, aus denen Sie wählen können, anstatt sie fest zu codieren. Eine andere Sache, die Sie untersuchen möchten, ist die Variable [`CDPATH`] (http://tiswww.case.edu/php/chet/bash/bashref.html#SEC66) (und [hier] (http: // tiswww .case.edu / php / chet / bash / bashref.html # SEC59)). Dennis Williamson vor 13 Jahren 0
9
Rich Homolka

Verwenden Sie bereits normale Vervollständigung? Versuchen

complete -d cd pushd rmdir 

In deiner Shell und sieh nach, ob sie nahe genug ist, was du willst.

Sie können auch versuchen, zsh zu verwenden, das besser abgeschlossen ist als bash.

Ich war auf der Suche nach einem Weg, um Autocomplete für CD-Ausschluss von Nicht-Verzeichnissen zu machen. Das hat es geschafft. Du rockst. Andy vor 12 Jahren 2
@Andy check out bash_completion @ http://bash-completion.alioth.debian.org/ Rich Homolka vor 12 Jahren 0