Autouzupełnianie terminala nie działa poprawnie

56

Jeśli zacznę wpisywać polecenie jak apt-gpo uderzeniu tab, powłoka wykonuje polecenie do apt-get, ale dla drugiej części polecenia, np. installJeśli wprowadzę kilka znaków, np. instaUderzenie tab, nie zostanie ono wykonane install.

Kolejny przykład: po wejściu sudouderzenie tabniczego nie kończy. na przykład: sudo apt-ge[ tab] i nic.

Zainstalowałem Ubuntu przy użyciu mini iso (40 MB instalatora sieciowego), więc może brakuje konfiguracji, której mi brakowało!

Dodałem ten kod do mojego, .bashrcale nadal nie działa:

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

Sprawdziłem również pozwolenie .bashrci jest -rw-r--r--.

Później pozyskuję również .bashrczmiany, source .bashrcaby zastosować zmiany w nowym środowisku, ale nadal nie mam żadnych efektów.

Używam, xfce4-terminalwięc pomyślałem, że to może być terminal, a nie bash.

Ale edycja:

~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml

I zmiana:

<property name="&lt;Super&gt;Tab" type="string" value="switch_window_key"/>

do:

<property name="&lt;Super&gt;Tab" type="string" value="empty"/>

To też nie robi różnicy.

Ravexina
źródło

Odpowiedzi:

83

bash-completion to zestaw skryptów bash, które umożliwiają indywidualne uzupełnianie określonych poleceń.

Dotyczy to nie tylko plików i katalogów, ale także np. Poleceń. Więc wpisujesz częściowe polecenia, a po naciśnięciu Tabotrzymujemy automatyczne uzupełnianie poleceń.

Instalacja

Krok 1: Zainstaluj zakończenie bash

$ sudo apt-get install bash-completion

Czasami działa, jeśli ponownie zainstalujemy go za pomocą następującego polecenia:

$ sudo apt-get install --reinstall bash-completion

Krok 2: Włącz uzupełnianie bash w swoim .bashrcpliku

Otwórz gedit ~/.bashrci jeśli te treści tam nie istnieją, dodaj je na końcu i zapisz.

# 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

Ważne: po zmianach musisz ~/.bashrczaopatrzyć source ~/.bashrcsię w terminal lub ponownie go otworzyć. Teraz powinno to zostać naprawione.

αғsнιη
źródło
1
Chciałbym potwierdzić, że dodanie powyższego bloku kodu do pliku ~ / .bashrc zadziałało dla mnie. Tylko jeden komentarz; tak naprawdę nie musisz się wylogowywać i ponownie logować, aby działało (możesz nie chcieć przerywać pracy), możesz po prostu uruchomić source ~/.bashrc.
nullgeppetto
Musiałem ponownie otworzyć Terminal, aby działał!
Gilberto Albino
2
Ukończenie nagle przestało działać dla mnie, powyższe kroki nie rozwiązują problemu. Wszelkie pomysły na rozwiązanie tego problemu? W dniu Ubuntu 16.04
Gudlaugur Egilsson
1
Krok 2 robi to dla mnie. Lub pobierz szablon od/etc/skel/.bashrc
Hendy Irawan
1
@SergioIvanuzzo nie jesteś pewien, z jakim problemem masz do czynienia, możesz spojrzeć na ten unix.stackexchange.com/q/219342/72456, który pomaga, w przeciwnym razie otwórz własne pytanie dotyczące problemu.
αғsнιη
27

Jeśli twoja sprawa nie działa pod kartą terminala Xfce,

Rozwiązanie jest następujące:

  1. Otwórz Application Menu> Settings> Window Manager.
  2. Kliknij Keyboardzakładkę.
  3. Wyczyść Switch window for same applicationustawienie.

Zrzut ekranu Menedżera okien, jak wyczyścić okno przełączania dla tej samej aplikacji

Znalazłem rozwiązanie tutaj

itsho
źródło
Próbowałem zaakceptować osłonę, ale wszystko już było na swoim miejscu. To rzeczywiście było dla mnie rozwiązanie.
user1226868,
Tak samo. Świetna wskazówka.
cerebrou
Dziękuję bardzo, naprawdę straciłem zmysły w tej sprawie.
Dustin Cowles,
2
Nadal potrzebne mi rozwiązanie od maja 2018 r.
clifgray
Dzięki działało dla mnie
MMH
3

Możesz także znajdować się w powłoce, która nie obsługuje automatycznego uzupełniania (np. Bourne Shell | SH). Jeśli chcesz automatycznego uzupełniania BASH, musisz przełączyć pociski, powiedz BASH (Bourne Again SHell) zamiast tego za pomocą polecenia

chsh -s /bin/bash

Źródło: Ubuntu Wiki - Changing Shells

Michael Lowden
źródło
1

W moim przypadku próbowałem wykonać skrypt ./myScript.sh, a pisanie ./my[tab]nie zakończyło się automatycznie.

Musiałem dodać uprawnienia do wykonywania pliku i automatyczne uzupełnianie działało.

Hezi
źródło