Terminaison automatique: parcourez les suggestions

37

J'avais ceci sur ma configuration Ubuntu et depuis que je suis passé à Fedora, je veux le configurer et j'ai oublié comment ... L'idée est simple:

Je ne veux pas que le terminal me montre des suggestions quand je double tab, mais plutôt qu'il passe en revue toutes les suggestions possibles avec chaque pression sur tab... ceci peut également être fait dans Vim.

Ainsi, lorsque je tape gedit aet que je tape , tabtous les fichiers avec une première lettre seront affichés a.

vanjadjurdjevic
la source
unix.stackexchange.com/questions/24419/…
Ciro Santilli a rejoint le forum 06

Réponses:

51

C'est en fait une fonctionnalité appelée readline menu-complete. Vous pouvez le lier à onglet (en remplacement de la valeur completepar défaut ) en lançant:

bind TAB:menu-complete

Vous voulez probablement ajouter cela à votre ~/.bashrc. Alternativement, vous pouvez le configurer pour toutes les complétions de readline (pas seulement bash) dans ~/.inputrc.

Vous pouvez également trouver utiles bind -p(afficher les liaisons actuelles, la note qui affiche l'onglet comme "\C-i") et bind -l(répertorier toutes les fonctions pouvant être liées), ainsi que la section d'édition de lignes du manuel bash et la documentation de readline .

derobert
la source
3
@vanjadjurdjevic: Bien sûr, il suffit de les lier à des clés différentes.
derobert
4
menu-completeest cool, mais il cache la liste de toutes les suggestions ;-( Est - il possible à la fois voir la liste et faire défiler les options?
Ciro Santilli新疆改造中心法轮功六四事件
2
@CiroSantilli J'ai aussi aimé cette fonctionnalité dans les shells basés sur readline. Actuellement, la méthode zsh pour le faire est très cool: le premier hit de l'onglet montre toutes les possibilités, le second coup commence à parcourir les éléments d'achèvement.
xuhdev
1
Nous allons considérer que vous utilisez cdet menu-completeet le vélo sur les répertoires. Sur quelle touche appuyez-vous pour "choisir" ce répertoire et commencer à parcourir le contenu de ce répertoire? Y at-il autre chose à définir / lier?
Tony
1
@ Tony ouais, ça va l'insérer. Mais si vous utilisez une barre oblique, tout va bien - un chemin du type " /usr/local//" est toujours parfaitement valide et commencera à compléter les éléments à l’intérieur du menu /usr/local.
derobert
6

Vous pouvez parcourir le menu de complétion dans Bash et vous pouvez également afficher le menu des éléments. Contrairement à Zsh, l'élément de menu actuel ne sera pas mis en surbrillance.

Ajouter à ~/.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

Documentation de 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
la source