web-dev-qa-db-fra.com

Comment faire la complétion automatique du terminal quand il y a plusieurs fichiers / répertoire?

Si j'ai plusieurs répertoires, comme:

afoo abar

parfois, mon terminal refuse l'auto-complétion lorsque j'appuie sur l'onglet (par exemple, "cd a" puis sur l'onglet), et imprime plutôt la liste des répertoires. Parfois, il émet même un son bruyant et agaçant. Avez-vous une idée de la manière de le rendre automatique dans de tels cas? Par exemple, il peut afficher d'abord abar, puis afoo si j'appuie de nouveau sur l'onglet. J'ai vu que c'est le cas dans Windows ou une application dans Ubuntu

30
TifatulS

Ce qui me sauve la vie, c’est d’explorer toutes les possibilités au lieu d’afficher une liste muette.

Comme bash utilise readline pour sa complétion automatique, ajoutez les lignes suivantes à ~/.inputrc

Une fois que vous êtes satisfait et que vous avez bien testé la solution ci-dessous pendant quelques jours/semaines, copier/coller (ne pas copier!) Les mêmes paramètres de ~/.inputrc à /etc/inputrc qui contient les paramètres du système, ce qui le rend accessible à tous les utilisateurs de votre système (y compris invité).

Le code:

# 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 exit votre terminal (ou un terminal distant comme PuTTY) et ouvrez-le à nouveau ...

Exemples:

  1. Lorsque vous avez 3 fichiers: file1, file2 et file3 et que vous tapez:

    e fTabTabTab

    ça va parcourir:

    e file1
    e file2
    e file3
    

    et lorsque vous voulez faire un cycle en arrière, appuyez simplement sur Shift+Tab

  2. Quand vous tapez:

    very-complicated-command with lots of command line parameters
    

    et la prochaine fois que vous aurez besoin de la même commande, il vous suffira de taper:

    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! ;-)

43
Fabby

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

cd a

et frapper tab vous obtenez rien et après une seconde tab (immédiatement après), vous obtenez une liste des noms commençant par aet vous devez ensuite insérer un fpour que le reste se termine automatiquement.

cd atabtabfname__tabtab

aura pour résultat

cd afoo
17
Rinzwind