Wie aktiviere ich die Tab-Vervollständigung von Platzhaltern in Bash?

8

Wie kann ich die Tab-Vervollständigung in Bash für eine Anweisung wie z vim db/migrate/*crea. Im Wesentlichen suche ich nach einer Tab-Vervollständigung, die dem regulären Ausdruck entspricht und die Optionen darstellt.

Wie würde man das machen?

Diese Frage bezieht sich auf eine, die ich hier gestellt habe

rudolph9
quelle
4
Der Ausdruck db/migrate/*creaist kein regulärer Ausdruck. Das *Zeichen hier wird als Bash-Erweiterungs-Platzhalter verwendet.
Mircea Vutcovici
Sicher ist es ein regulärer Ausdruck. Es passt zusammen db/migrate///////crea. :-)
Ghoti

Antworten:

3

Welche Version von Bash verwenden Sie? Für mich mit 4.1.2 scheint es unter CentOS 6.2 sofort zu funktionieren:

[user@host foo]$ cd /tmp/foo
[user@host foo]$ mkdir bar
[user@host foo]$ touch bar/foo{1,2,3}
[user@host foo]$ vim bar/*1
*TAB*
[user@host foo]$ vim bar/foo1 
[user@host foo]$ touch bar/bar1
[user@host foo]$ vim bar/*1
*TAB* *TAB*
[user@host foo]$ vim bar/*1
bar1/ foo1  

Stellen Sie sicher, dass Sie zweimal auf die Tabulatortaste tippen, um die Liste der automatischen Vervollständigungen aufzurufen?

zje
quelle
4
Dies hat mehr mit Ihren Bash-Abschlussskripten zu tun als mit Ihrer Version von Bash.
Ephemient
1

show-all-if-ambiguousDurch einmaliges (statt zweimaliges) Drücken der Tabulatortaste werden alle Abschlüsse angezeigt. Es ändert auch die Art und Weise, wie Globs fertiggestellt werden:

$ touch 1.0.{1,2}
$ bind 'set show-all-if-ambiguous off'
$ open *0* # I pressed tab twice here, and *0* was kept as *0*
1.0.1  1.0.2
$ open *0*^C
$ bind 'set show-all-if-ambiguous on'
$ open *0* # I pressed tab once here, and *0* was replaced with 1.0.
1.0.1  1.0.2
$ open 1.0.

glob-complete-word (\ eg) würde auch *0(ohne Platzhalter am Ende) vervollständigen 1.0.. Es funktioniert auch mit Mustern wie */file*und **/file.

Lri
quelle