Comment rendre la saisie semi-automatique du terminal lorsqu'il y a plusieurs fichiers / répertoires?

32

Si j'ai plusieurs répertoires, comme:

afoo abar

Parfois, mon terminal refuse la saisie semi-automatique lorsque j'appuie sur tab (par exemple "cd a" puis tab), et imprime la liste des répertoires à la place. Parfois, il émet même un son bruyant et ennuyeux. Avez-vous une idée de la façon de le compléter dans des cas comme celui-ci? Par exemple, il peut afficher d'abord abar, puis afoo si j'appuie de nouveau sur tab. J'ai vu que c'était le cas dans Windows, ou une applciation dans Ubuntu

TifatulS
la source

Réponses:

46

Quelque chose qui est une bouée de sauvetage pour moi est d'avoir bash cycle à travers les possibilités au lieu d'afficher une liste stupide.

Comme bash utilise readlinepour son auto-complétion, ajoutez les lignes suivantes à~/.inputrc

Une fois que vous êtes satisfait et que vous avez soigneusement testé ci - dessous solution pour quelques jours / semaines, couper et coller (ne pas copier!) Les mêmes paramètres de ~/.inputrcà /etc/inputrcqui contient les paramètres du système à l' échelle, mise à disposition de tous les utilisateurs sur votre système (y compris l'invité).

Le codez:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

puis exitvotre terminal (ou terminal distant comme du mastic) et rouvrez-le ...

Exemples:

  1. Lorsque vous avez 3 fichiers: file1, file2et file3vous tapez:

    e fTabTabTab

    il va parcourir:

    e file1
    e file2
    e file3

    et quand vous voulez faire un cycle vers l'arrière, appuyez simplement sur Shift+Tab

  2. Lorsque vous tapez:

    very-complicated-command with lots of command line parameters

    et la prochaine fois que vous aurez besoin de la même commande, vous tapez simplement:

    very

    et ça va taper pour vous:

    very-complicated-command with lots of command line parameters

Cela vous fera économiser une tonne de temps en bash! ;-)

Fabby
la source
2
+1, intéressant, mais: 1. ~/.inputrcpourrait être préférable à /etc/inputrc, et 2. Je pense que vous pouvez le définir bashdirectement: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru
C'est assez sympa, merci (et j'ai mon vote positif). Existe-t-il un moyen universel de montrer les options qu'il traversera, qui combine le meilleur des deux mondes? J'aime la possibilité de tabulation + tabulation avec des dossiers et des sous - commandes, etc. donc je n'ai pas à me souvenir de tous (par exemple git branch <tab through branches>. Cependant, si je pouvais voir une liste et un onglet à travers ses éléments, ce serait génial! Pour les répertoires et les fichiers lsest une option pour voir quels éléments sont disponibles. Cependant, pour les sous-commandes, ce n'est pas si facile ou évident, malheureusement.
Erik
Cela fonctionne également sur PuTTy! Je
n'ai
@Erik: Apparemment, ce que vous avez demandé est possible mais ne va pas modifier ma réponse pour simplifier les choses ici. (ancien commentaire supprimé que ce n'est pas possible)
Fabby
18

Après le 1er, tabvous devez insérer plus de lettres. Donc, si vous tapez

cd a

et appuyez sur tabvous n'obtenez rien et après une seconde tab(immédiatement après), vous obtenez une liste des noms commençant par a, puis vous devez insérer un fpour qu'il complète automatiquement le reste afin

cd atabtabftabtab

aura pour résultat

cd afoo
Rinzwind
la source
2
À mon humble avis, c'est la bonne façon. Personnellement, je trouve le comportement de Windows très ennuyeux. Considérez le cas où vous avez beaucoup de fichiers commençant par aet dont vous avez besoin du dernier. Lorsque vous appuyez accidentellement sur tab après aavoir parcouru la liste de toutes les finitions possibles pour arriver à la bonne.
Tobias
@Tobias: lorsque vous appuyez accidentellement sur [Tab] trop tôt en utilisant l'autre système , il y a toujours [Ctrl] [K] ... ;-)
Fabby