Il completamento della scheda non funziona per i comandi


50

Sto cercando di utilizzare il completamento della scheda per i comandi in Ubuntu 11.04 Beta 1, eseguendo tutti gli ultimi aggiornamenti, ma non sembra funzionare. (Sebbene sia installato il pacchetto bash-completamento)

Il completamento della scheda funziona correttamente solo per directory o file.

Qualche idea su dove scavare?


Ho risolto questo problema utilizzando la soluzione fornita su askubuntu.com/questions/325807/…
DB

Risposte:


67

Controlla se hai il seguente frammento nel tuo .bashrc (dovrebbe essere lì per impostazione predefinita)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

Grazie! Ho sostituito .bashrc con il mio e quindi non sono riuscito a capire quale fosse il problema. Ora funziona perfettamente.
Screatch

questo ha risolto i miei completamenti automatici di git bash su xubuntu 12.04, molte grazie.
palmico

Che ne dici di completamento automatico per switch e opzione della riga di comando apt-get? cioè quando inserisci apt-get ins e quindi premi la scheda per completarla automaticamente.
Reza Ghodsi,

3
Vorrei aggiungere che il pacchetto bash-completionè necessario affinché questo funzioni. Stranamente, l'installazione standard della mia azienda non ha questo pacchetto.
Edgar,

13

Ho pensato di aggiungere anche la seguente spiegazione aggiuntiva per un fallimento del completamento della bash: è troppo lungo per un commento e potrebbe essere utile per qualcuno che ha un problema con il completamento della bash, poiché presumibilmente questa è la domanda canonica "generale" a cui vengono indicati tutti i duplicati.

Anche se hai la riga appropriata nel tuo .bashrc(come nella risposta sopra) e il bash-completionpacchetto è installato, il completamento della bash può comunque funzionare male se hai shopt -s nullglobo shopt -s failglobnel tuo .bashrco .bash_aliases.

I seguenti scenari sono stati testati con tutte le personalizzazioni dell'utente .bashrce .bash_aliasesrimossi per fornire un test equo, con la linea di completamento bash appropriata .bashrcpresente e bash-completioninstallata.

1) Il primo scenario è quando hai shopt -s failglobnel tuo .bashrco .bash_aliases.

Quando si tenta di eseguire il tab rispettivamente di directory e file completi, si verificano questi errori:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

Tuttavia, i comandi verranno comunque completati correttamente.

2) Con shopt -s nullglobabilitato, provare a completare una scheda o un file comporterà invece che tutto sia elencato, senza completamento:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

Ho abbreviato l'elenco qui, poiché era molto lungo e non è necessario riprodurlo tutto.

Ancora una volta, il completamento del comando funzionerà comunque.

Quindi, semplicemente rimuovendo shopt -s failglobo shopt -s nullglobpotresti anche risolvere il problema degli errori con il completamento bash, supponendo che tu abbia la linea appropriata nella tua .bashrce bash-completioninstallata.


1
Bella spiegazione, ha risolto il mio problema quando provo il completamento della scheda e si è verificato un errore >> parole [0] = $ {! Ref} $ {COMP_WORDS [i]}
bagustris

Sebbene funzioni come soluzione alternativa, è una cosa scadente per qualsiasi programmatore di completamento fare affidamento. Poiché nullglob (che è nominalmente migliore per molti) e parent potrebbero essere impostati, qualsiasi codice di completamento che richiede la vecchia semantica (i caratteri jolly senza corrispondenze generano il carattere jolly stesso) dovrebbe salvare l'impostazione globale attuale, impostare quello di cui hanno bisogno e ripristinare il impostazione del vecchio glob in seguito, proprio come viene solitamente utilizzato IFS.
Alex North-Keys,

10

Oltre a modificare il /etc/bash.bashrcfile (vedi altre risposte) potrebbe essere necessario installare il bash-completionpacchetto.

Controlla se il /etc/bash_completionfile esce. Se no:

sudo apt-get install bash-completion

(Nella mia installazione di Debian 7 non era inizialmente installato)


7

Per quanto possa sembrare semplice, assicurati che bash sia la tua shell attiva

echo $SHELL

Ho appena eseguito l'aggiornamento a Ubuntu 14.04.1 LTS e non ho avuto il completamento automatico della scheda, anche dopo aver seguito i consigli su questo post, solo per rendermi conto che la mia shell era impostata su /bin/she non /bin/bash.


2

Aggiornamento a Ubuntu 14.04.01

Controlla se hai il seguente frammento nel tuo .bashrc (dovrebbe essere lì per impostazione predefinita)

sudo vim /etc/bash.bashrc (digitare "i" per modificare il file)

    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
     if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

Uncomment 7 righe sopra

Salva il file "esc + w + q + invio"

Riavvia bash

exec bash


1
Cosa farà questo? Non è così per impostazione predefinita?
Tim

Come dice @Tim, quella configurazione è fornita dalla configurazione predefinita.
ssoto,

Questo ha funzionato per me
Thamaraiselvam,

Questa risposta ha funzionato come un incantesimo e ha voti negativi ???
greuze,
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.