Terminal Autocomplete: Vorschläge durchlaufen

37

Ich hatte dies auf meinem Ubuntu-Setup und seitdem ich zu Fedora gewechselt bin, möchte ich es einstellen und ich habe vergessen, wie ... Die Idee ist einfach:

Ich möchte nicht, dass das Terminal mir Vorschläge anzeigt, wenn ich doppelt spiele. tabStattdessen möchte ich, dass es bei jedem Drücken auf jeden möglichen Vorschlag durchläuft. tabDies kann auch in Vim erfolgen.

Wenn ich also tippe gedit aund drücke tab, wird mir jede Datei mit einem Anfangsbuchstaben angezeigt a.

vanjadjurdjevic
quelle

Antworten:

51

Dies ist eine Readline-Funktion, die aufgerufen wird menu-complete. Sie können es an die Registerkarte binden (anstelle der Standardeinstellung complete), indem Sie Folgendes ausführen:

bind TAB:menu-complete

Sie möchten das wahrscheinlich zu Ihrem hinzufügen ~/.bashrc. Alternativ können Sie es für alle Readline-Vervollständigungen (nicht nur für Bash) in konfigurieren ~/.inputrc.

Möglicherweise finden Sie auch bind -p(aktuelle Bindungen anzeigen, Notiz mit Tabulator als "\C-i") und bind -l(alle Funktionen auflisten, die gebunden werden können) nützliche Informationen sowie den Abschnitt zur Zeilenbearbeitung des Bash-Handbuchs und die Dokumentation zu readline .

derobert
quelle
3
@vanjadjurdjevic: Sicher, binde sie einfach an verschiedene Schlüssel.
Derobert
4
menu-completeist cool, aber es verbirgt die Liste aller möglichen Vorschläge ;-( Ist es möglich, die Liste zu sehen und durch Optionen zu radeln?
Ciro Santilli
2
@CiroSantilli 六四 六四 事件 包 包 卓 Diese Funktion gefällt mir auch in Readline-basierten Shells. Derzeit ist die Vorgehensweise sehr cool: Der erste Tabulator-Treffer zeigt alle Möglichkeiten, der zweite Tabulator-Treffer beginnt mit dem Durchlaufen der Abschlusselemente.
Xuhdev
1
Stellen Sie sich vor, Sie verwenden cdund menu-completeund fahren mit dem Fahrrad über Verzeichnisse. Welche Taste drücken Sie, um dieses Verzeichnis auszuwählen und den Inhalt dieses Verzeichnisses zu durchlaufen? Gibt es noch etwas zu setzen / binden?
Tony
1
@ Tony ja, es wird es einfügen. Wenn Sie jedoch einen Schrägstrich verwenden, ist dies in Ordnung - ein Pfad wie " /usr/local//" ist immer noch gültig und fängt an, das Menü zu vervollständigen /usr/local.
Derobert
6

Sie können durch das Abschlussmenü in Bash blättern und das Menü der Elemente anzeigen. Anders als in Zsh wird der aktuelle Menüpunkt nicht hervorgehoben.

Hinzufügen zu ~/.inputrc:

set show-all-if-ambiguous on
set show-all-if-unmodified on
set menu-complete-display-prefix on
"\t": menu-complete
"\e[Z": menu-complete-backward

Dokumentation von man bash:

Readline Variables
    menu-complete-display-prefix (Off)
           If set to On, menu completion displays the common prefix of the
           list of possible completions (which may be empty) before cycling
           through the list.
    show-all-if-ambiguous (Off)
           This alters the default behavior of the completion functions. If
           set to On, words which have more than one possible completion
           cause the matches to be listed immediately instead of ringing
           the bell.
    show-all-if-unmodified (Off)
           This alters the default behavior of the completion functions in
           a fashion similar to show-all-if-ambiguous. If set to On, words
           which have more than one possible completion without any
           possible partial completion (the possible completions don't
           share a common prefix) cause the matches to be listed
           immediately instead of ringing the bell.

Completing
    menu-complete
          Similar to complete, but replaces the word to be completed with
          a single match from the list of possible completions. Repeated
          execution of menu-complete steps through the list of possible
          completions, inserting each match in turn. At the end of the list
          of completions, the bell is rung (subject to the setting of
          bell-style) and the original text is restored. An argument of
          n moves n positions forward in the list of matches; a negative
          argument may be used to move backward through the list. This
          command is intended to be bound to TAB, but is unbound by
          default.
    menu-complete-backward
          Identical to menu-complete, but moves backward through the list
          of possible completions, as if menu-complete had been given
          a negative argument. This command is unbound by default.
gmarmstrong
quelle