Uzupełnianie tabulatorów nie działa dla poleceń


50

Próbuję użyć uzupełniania tabulatorów do poleceń w Ubuntu 11.04 Beta 1, uruchamiając wszystkie najnowsze aktualizacje, ale wydaje się, że to nie działa. (Chociaż pakiet bash-complete jest zainstalowany)

Uzupełnianie tabulatorów działa poprawnie tylko dla katalogów lub plików.

Jakieś pomysły, gdzie kopać?


Rozwiązałem ten problem, korzystając z rozwiązania podanego na askubuntu.com/questions/325807/…
DB

Odpowiedzi:


67

Sprawdź, czy w swoim pliku .bashrc znajduje się następujący fragment (powinien być tam domyślnie)

# 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

Dzięki! Zamieniłem .bashrc na własny i dlatego nie mogłem zrozumieć, w czym był problem. Teraz działa idealnie.
Screatch

to naprawiło również moje autouzupełnianie git bash na Xubuntu 12.04, wielkie dzięki.
palmowy

Co powiesz na automatyczne uzupełnianie dla przełącznika i opcji linii poleceń apt-get? tzn. kiedy wpiszesz apt-get ins, a następnie naciśniesz kartę, aby automatycznie ją uzupełnić.
Reza Ghodsi

3
Chciałbym dodać, że pakiet bash-completionjest niezbędny, aby to działało. Co dziwne, standardowa instalacja mojej firmy nie ma tego pakietu.
Edgar

13

Pomyślałem, że dodam również następujące dodatkowe wyjaśnienie niepowodzenia ukończenia bashu - jest on zbyt długi na komentarz i może być przydatny dla kogoś, kto ma problem z ukończeniem basha, ponieważ przypuszczalnie jest to „ogólne” pytanie kanoniczne, na które wszystkie duplikaty są odsyłane.

Nawet jeśli masz odpowiednią linię w swoim .bashrc(jak w powyższej odpowiedzi) i bash-completionpakiet jest zainstalowany, zakończenie bash może nadal działać nieprawidłowo, jeśli masz jeden shopt -s nullgloblub shopt -s failglobw swoim .bashrclub .bash_aliases.

Poniższe scenariusze zostały przetestowane ze wszystkimi dostosowaniami użytkownika .bashrci .bash_aliasesusunięte, aby dać rzetelny test, z .bashrcobecną i bash-completionzainstalowaną odpowiednią linią zakończenia bash .

1) Pierwszy scenariusz ma miejsce shopt -s failglobw twoim .bashrclub .bash_aliases.

Podczas próby utworzenia tabulacji kompletnych katalogów i plików, odpowiednio, wystąpią następujące błędy:

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

Jednak polecenia będą nadal wykonywane poprawnie.

2) Przy shopt -s nullglobwłączonej próbie przejścia do zakładki uzupełnia katalog lub plik, zamiast tego prowadzi do wyświetlenia wszystkiego na liście, bez zakończenia:

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

Skróciłem tutaj listę, ponieważ była bardzo długa i nie trzeba jej wszystkiego reprodukować.

Ponownie wykonywanie poleceń będzie jednak nadal działać.

Tak więc, po prostu usuwając shopt -s failgloblub shopt -s nullglobmogąc rozwiązać problem błędów z ukończeniem bash, zakładając, że masz odpowiednią linię w swoim .bashrci bash-completionzainstalowaną.


1
Ładne wyjaśnienie, rozwiązało mój problem, gdy próbuję uzupełnić kartę i wystąpił błąd >> słowa [0] = $ {! Ref} $ {COMP_WORDS [i]}
bagustris

Chociaż działa to jako obejście, jest to kiepska rzecz dla każdego programisty uzupełniającego, na którym można polegać. Ponieważ można ustawić wartość nullglob (która jest nominalnie lepsza dla wielu) i kin, każdy kod uzupełniający, który wymaga starej semantyki (symbole wieloznaczne bez dopasowań skutkują samą symbolem wieloznacznym), powinien zapisać bieżące ustawienie globalne, ustawić potrzebne i przywrócić stare globalne ustawienie później, tak jak zwykle używany jest IFS.
Alex North-Keys,

10

Oprócz modyfikacji /etc/bash.bashrcpliku (patrz inne odpowiedzi) może być konieczne zainstalowanie bash-completionpakietu.

Sprawdź, czy /etc/bash_completionplik się kończy. Jeśli nie:

sudo apt-get install bash-completion

(W mojej instalacji Debiana 7 nie był początkowo zainstalowany)


7

Choć może się to wydawać proste, upewnij się, że bash jest Twoją aktywną powłoką

echo $SHELL

Właśnie zaktualizowałem system do Ubuntu 14.04.1 LTS i nie miałem automatycznego uzupełniania tabulatorów, nawet po zastosowaniu się do wskazówek w tym poście, tylko po to, by zdać sobie sprawę, że moja powłoka jest ustawiona na /bin/shi nie /bin/bash.


2

Aktualizacja do Ubuntu 14.04.01

Sprawdź, czy w swoim pliku .bashrc znajduje się następujący fragment (powinien być tam domyślnie)

sudo vim /etc/bash.bashrc (wpisz „i”, aby edytować plik)

    # 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

Odkomentuj 7 linii powyżej

Zapisz plik „esc + w + q + enter”

Uruchom ponownie bash

exec bash


1
Co to zrobi? Czy to nie jest tak domyślnie?
Tim

Jak mówi @Tim, ta konfiguracja jest dostarczana domyślnie.
ssoto

To zadziałało dla mnie
Thamaraiselvam,

Ta odpowiedź działała jak urok i ma negatywne głosy?
greuze,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.