Bash Autocomplete wie zsh

28

Ich verwende Bash, aber ich möchte, dass der ZSh-Stil automatisch vervollständigt wird (Sie drücken die Tabulatortaste und es werden die Möglichkeiten durchgegangen), anstatt was Bash zu tun scheint, dh eine Liste von Möglichkeiten anzuzeigen, aber nichts auszuwählen, bis ich etwas eingebe einige mehr zu disambiguieren. Wie kann ich zsh Typ Verhalten in Bash bekommen?

Die Suche nach einer Lösung hat viele Antworten auf andere Fragen ergeben, daher hoffe ich, dass ich hier eine einfache Antwort erhalten kann (dh was ich in meine einfügen soll .bashrc).

(Und um die offensichtliche Frage zu beantworten, muss ich hier bash verwenden, weil ich gerade einem Team beigetreten bin und sie einige Dinge tun, um bash einzurichten, damit die Umgebung einfacher zu arbeiten ist. Ich kann wahrscheinlich irgendwann sicherstellen, dass es genauso funktioniert in zsh, aber im Moment ist es einfacher, wenn ich bash benutze und es nur so benehme, als würde es sich bei der interaktiven Verwendung eher wie zsh verhalten.)

G Gordon Worley III
quelle

Antworten:

22

ich benutze

bind 'TAB:menu-complete'

um es zu erreichen

Ciclamino
quelle
11
Wenn ich dies zu meinem .bashrc hinzufüge, durchläuft tab die möglichen Optionen, anstatt sie im Terminal aufzulisten. Ist es möglich, beide Verhaltensweisen zu bekommen?
Antonios Hadjigeorgalis
Shitf-TabVerwenden Sie , um rückwärts zu vervollständigen bind '"\e[Z":menu-complete-backward'.
Ainar-G
24

Um die erste Vervollständigung und eine Auflistung zu erhalten, können Sie bashrc Folgendes hinzufügen

bind 'set show-all-if-ambiguous on'
bind 'TAB:menu-complete'

show-all-if-ambiguous: Hiermit wird das Standardverhalten der Vervollständigungsfunktionen geändert. Wenn diese Option aktiviert ist, werden bei Wörtern mit mehr als einer möglichen Vervollständigung die Übereinstimmungen sofort aufgelistet, anstatt die Glocke zu läuten. Der Standardwert ist "Aus".

Weitere Informationen finden Sie im Bash-Handbuch .

Bearbeiten:

Dies führt nicht dazu, dass bash genau so funktioniert wie zsh tho. Zsh wird bis zum nächsten mehrdeutigen Spiel fertiggestellt. Bash durchläuft alle Matches.

z.B

$ ls ~/.ba<tab> .bashrc .bash_history .bash_profile

  • zsh: wird bis zu ~ / .bash vervollständigt und zeigt eine Liste der Übereinstimmungen an, mit der Sie _ leicht anhängen und <tab>erneut drücken können.
  • bash: durchläuft nur alle ~ / .ba * -Matches.
ingkebil
quelle
8
Ich mochte die Pfeiltasten und die visuelle Anzeige der Autovervollständigung von zsh. Gibt es eine Möglichkeit, diese Verhaltensweisen mit Bash zu erreichen? Ich
schalte
2

Die Antwort von ingkebil weiterverfolgen , für diejenigen, die bindund setin setzen inputrc:

$ tail -n 4 /etc/inputrc
# zsh like completion:
# /superuser/288714/bash-autocomplete-like-zsh
set show-all-if-ambiguous on
TAB:menu-complete

Ich mag es, meine .bashrcsauber zu halten.

Bartekbrak
quelle