Die Tab-Vervollständigung funktioniert bei Befehlen nicht

50

Ich versuche, die Tabulatorvervollständigung für Befehle in Ubuntu 11.04 Beta 1 zu verwenden und führe die neuesten Updates aus, aber es scheint nicht zu funktionieren. (Obwohl die Paket-Bash-Vervollständigung installiert ist)

Die Tab-Vervollständigung funktioniert nur für Verzeichnisse oder Dateien ordnungsgemäß.

Irgendwelche Ideen, wo man gräbt?

Screatch
quelle
Ich habe dieses Problem mit der unter askubuntu.com/questions/325807/…
DB

Antworten:

67

Überprüfen Sie, ob Sie das folgende Fragment in Ihrer .bashrc haben (sollte standardmäßig vorhanden sein)

# 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
Adam Byrtek
quelle
Vielen Dank! Ich habe .bashrc durch mein eigenes ersetzt und konnte daher nicht herausfinden, woran das Problem lag. Funktioniert jetzt einwandfrei.
Screatch
dies hat mein git bash autocompletes bei xubuntu 12.04 ebenfalls behoben, vielen dank.
Palmic
Wie wäre es mit Auto-Vervollständigung für Schalter und Option der Befehlszeile apt-get? dh wenn Sie apt-get ins eingeben und dann die Tabulatortaste drücken, um es automatisch zu vervollständigen.
Reza Ghodsi
3
Ich möchte hinzufügen, dass das Paket bash-completionnotwendig ist, damit dies funktioniert. Seltsamerweise enthält die Standardinstallation meiner Firma dieses Paket nicht.
Edgar
13

Ich dachte, ich würde auch die folgende zusätzliche Erklärung für ein Versagen der Bash-Vervollständigung hinzufügen - sie ist zu lang für einen Kommentar und kann für jemanden nützlich sein, der ein Problem mit der Bash-Vervollständigung hat, da dies vermutlich die 'allgemeine' kanonische Frage ist, auf die sich diese Frage bezieht Alle Duplikate werden referiert.

Auch wenn Sie die entsprechende Zeile in Ihrem .bashrc(wie in der obigen Antwort) und dem bash-completioninstallierten Paket haben, kann die Bash-Vervollständigung immer noch fehlerhaft sein, wenn Sie entweder shopt -s nullgloboder shopt -s failglobin Ihrem .bashrcoder haben .bash_aliases.

Die folgenden Szenarien wurden mit allen Benutzeranpassungen von getestet .bashrcund .bash_aliasesentfernt, um einen fairen Test zu ergeben, wobei die entsprechende Bash-Vervollständigungslinie .bashrcvorhanden und bash-completioninstalliert war.

1) Das erste Szenario ist, wenn Sie shopt -s failglobin Ihrem .bashrcoder haben .bash_aliases.

Beim Versuch, vollständige Verzeichnisse bzw. Dateien zu tabulieren, treten folgende Fehler auf:

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

Befehle werden jedoch weiterhin erfolgreich ausgeführt.

2) shopt -s nullglobWenn diese Option aktiviert ist, führt der Versuch, ein Verzeichnis oder eine Datei auf der Registerkarte zu vervollständigen, zu einer unvollständigen Auflistung aller Elemente:

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

Ich habe die Auflistung hier gekürzt, da es sehr lang war und nicht notwendig ist, alles zu reproduzieren.

Wieder funktioniert die Befehlsausführung jedoch weiterhin.

Entfernen Sie also einfach das Problem der Fehler mit der Bash-Vervollständigung shopt -s failgloboder shopt -s nullgloblösen Sie es, vorausgesetzt, Sie haben die entsprechende Zeile in Ihrem .bashrcund bash-completioninstalliert.


quelle
1
Gute Erklärung, mein Problem wurde behoben, als ich versuchte, den Tab zu vervollständigen und ein Fehler aufgetreten ist >> words [0] = $ {! Ref} $ {COMP_WORDS [i]}
bagustris
Während dies als Workaround funktioniert, ist es für jeden Abschlussprogrammierer eine schlechte Sache, sich darauf zu verlassen. Da nullglob (das nominell besser für viele ist) und kin festgelegt werden können, sollte jeder Vervollständigercode, der die alte Semantik erfordert (Platzhalter ohne Übereinstimmungen führen zum Platzhalter selbst), die aktuelle Glob-Einstellung speichern, die benötigte Einstellung festlegen und die wiederherstellen Danach alte Glob-Einstellung, wie es normalerweise bei IFS der Fall ist.
Alex North-Keys
10

Zusätzlich zum Ändern der /etc/bash.bashrcDatei (siehe andere Antworten) müssen Sie möglicherweise das bash-completionPaket installieren .

Überprüfen Sie, ob die /etc/bash_completionDatei existiert. Wenn nein:

sudo apt-get install bash-completion

(In meiner Installation von Debian 7 war es ursprünglich nicht installiert)

Sergeant
quelle
7

So einfach es auch klingen mag, stellen Sie sicher, dass bash Ihre aktive Shell ist

echo $SHELL

Ich habe gerade ein Upgrade auf Ubuntu 14.04.1 LTS durchgeführt und hatte keine automatische Vervollständigung der Tabs, obwohl ich den Ratschlägen in diesem Beitrag gefolgt war, nur um zu erkennen, dass meine Shell auf /bin/shund nicht gesetzt war /bin/bash.

nocdib
quelle
2

Update auf Ubuntu 14.04.01

Überprüfen Sie, ob Sie das folgende Fragment in Ihrer .bashrc haben (sollte standardmäßig vorhanden sein)

sudo vim /etc/bash.bashrc (geben Sie "i" ein, um die Datei zu bearbeiten)

    # 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

7 Zeilen oben auskommentieren

Datei speichern "esc + w + q + enter"

Starten Sie bash neu

exec bash

Diego Arriola
quelle
1
Was wird das tun? Ist das nicht standardmäßig so?
Tim
Wie @Tim sagt, ist diese Konfiguration standardmäßig konfiguriert.
ssoto
Dies funktionierte für mich
Thamaraiselvam
Diese Antwort hat wie ein Zauber gewirkt und hat negative Stimmen ???
Greuze