Weitere hilfreiche Eingabeaufforderungen zum Ausfüllen von Registerkarten in Bash?

7

Angenommen, ich habe ein Verzeichnis mit einigen Dateien wie folgt:

$ ls
file1  file2  file3

Und ich möchte einige Tab-Vervollständigungen in Bash durchführen:

$ cat file<tab>
file1  file2  file3  

Ich erinnere mich , dass jemand Tabulatorvervollständigung tun und die Schale die nächsten Teile bolded, so in diesem Fall wäre es fett das 1, 2und 3der Dateinamen , so dass es wie folgt aussehen werden: Datei 1 Datei 2 Datei 3

Hier erfahren Sie, was Sie als Nächstes eingeben sollten.

Ich denke, das war ein Feature von zsh, aber gibt es eine Möglichkeit, es zu bekommen bash?

Rory
quelle

Antworten:

2

Ich kenne keine direkt portierten Funktionen, aber es gibt eine Möglichkeit, dies zu hacken bash. Mit der programmierbaren Vervollständigung können Sie festlegen, was angezeigt werden soll, wenn Sie diese Tabulatortaste abhängig vom aufrufenden Programm drücken. Auf diese Weise können Sie (als beliebtes Beispiel) ssh[Tab] Optionen für die automatische Vervollständigung anzeigen ~/.ssh/known_hosts.

Hier sind einige nützliche Ressourcen:

Intro, Source und RPMs

Benutzer hat "Vervollständigungen" beigesteuert

Mehr Beispiele

Und noch mehr Beispiele

Um die oben angegebene Funktionalität zu duplizieren, müssen Sie sich natürlich mit dem programmierbaren Aspekt der Fertigstellung abfinden und Ihre eigenen Funktionen schreiben. Ubuntu liefert seine eigenen vom Benutzer bereitgestellten Vervollständigungen aus , die ein guter Ausgangspunkt sind.

Andy
quelle
2

In Red Hat-basierten Distributionen gibt es eine Paket-Bash-Vervollständigung. Dieses Paket füllt das Verzeichnis /etc/bash_completion.d/ mit einem bestimmten Abschlussverhalten für mehrere Programme. Ich benutze es unter Fedora, Red Hat und CentOS.

yum install bash-completion
ghm1014
quelle
1

Ich benutze tcshwegen einer ähnlichen Funktion.

Hier ist meine /etc/csh.cshrc Datei:

if ($?tcsh && $?prompt) then

   bindkey "\e[1~" beginning-of-line # Home
   bindkey "\e[7~" beginning-of-line # Home rxvt
   bindkey "\e[2~" overwrite-mode    # Ins
   bindkey "\e[3~" delete-char       # Delete
   bindkey "\e[4~" end-of-line       # End
   bindkey "\e[8~" end-of-line       # End rxvt

   bindkey -k up history-search-backward
   bindkey -k down history-search-forward

   set filec
   set prompt="[%B%m%b:%~] %n%# "
   set complete = enhance            # important line
   set autolist                      # important line too
   alias ls 'ls -hA --color'
   alias ll 'ls -l'
endif
Julien Tartarin
quelle