Come rendere il completamento automatico del terminale in presenza di più file / directory?


32

Se ho diverse directory, come:

afoo abar

a volte il mio terminale rifiuta il completamento automatico quando premo tab (es. "cd a" poi tab) e stampa invece l'elenco delle directory. A volte emette persino un suono rumoroso e fastidioso. Hai idea di come completarlo automaticamente in casi come questo? Ad esempio, può mostrare prima l'abar e poi se premo nuovamente tab. Ho visto che questo è il caso di Windows o di qualche applicazione in Ubuntu

Risposte:


46

Qualcosa che mi salva la vita è avere un ciclo bash attraverso le possibilità invece di mostrare un elenco stupido.

Mentre bash sta usando readlineper il suo completamento automatico, aggiungi le seguenti righe a~/.inputrc

Una volta che sei soddisfatto e hanno accuratamente testato sotto soluzione per un paio di giorni / settimane, taglia e incolla (non copiare!) Le stesse impostazioni da ~/.inputrca /etc/inputrcche contiene le impostazioni a livello di sistema, rendendo questo a disposizione di tutti gli utenti sul proprio sistema (incluso ospite).

Il 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

quindi il exittuo terminale (o terminale remoto come stucco) e aprilo di nuovo ...

Esempi:

  1. Quando si dispone di 3 file: file1, file2ed file3e digitate:

    e fTabTabTab

    scorrerà attraverso:

    e file1
    e file2
    e file3

    e quando vuoi tornare indietro, premi Shift+Tab

  2. Quando si digita:

    very-complicated-command with lots of command line parameters

    e la prossima volta che hai bisogno dello stesso comando, devi solo digitare:

    very

    e digiterà per te:

    very-complicated-command with lots of command line parameters

Questo ti farà risparmiare un sacco di tempo in bash! ;-)


2
+1, interessante, ma: 1. ~/.inputrcpotrebbe essere preferibile rispetto a /etc/inputrc, e 2. Penso che puoi impostarlo bashdirettamente: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru,

Questo è abbastanza carino, grazie (e ho il mio voto). Esiste un modo universale per mostrare le opzioni attraverso le quali scorrere, che combina il meglio dei due mondi? Mi piace la possibilità tab + tab con cartelle e sottocomandi, ecc. Quindi non devo ricordarli tutti (es git branch <tab through branches>. Tuttavia, se potessi vedere un elenco e una scheda attraverso i suoi elementi, sarebbe fantastico! Per directory e file lsè un'opzione per vedere quali articoli sono disponibili. Tuttavia, per i sottocomandi non è così facile o ovvio, sfortunatamente.
Erik,

Questo funziona anche su PuTTy! Ho dovuto riavviarlo una volta :)
np8,

@Erik: Apparentemente, ciò che hai chiesto è possibile ma non modificherò la mia risposta per rendere le cose semplici qui. (cancellato vecchio commento che non è possibile)
Fabby

18

Dopo il 1 ° tabè necessario inserire più lettere. Quindi se digiti

cd a

e premi tabnon ottieni nulla e dopo un secondo tab(immediatamente successivo) ottieni un elenco di nomi che iniziano con ae quindi devi inserire un fper farlo completare automaticamente il resto così

cd atabtabftabtab

si tradurrà in

cd afoo

2
IMHO: Questo è il modo giusto. Personalmente trovo il comportamento di Windows molto fastidioso. Considera il caso in cui hai molti file che iniziano con ae hai bisogno dell'ultimo. Quando si preme accidentalmente la scheda dopo ache è necessario scorrere l'elenco di tutti i possibili completamenti per arrivare a quello giusto.
Tobias,

@Tobias: quando si preme accidentalmente [Tab] troppo presto usando l'altro sistema , c'è ancora [Ctrl] [K] ... ;-)
Fabby
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.