Завершення вкладки не працює для команд


50

Я намагаюся використовувати вкладку для заповнення команд у Ubuntu 11.04 Beta 1, запускаючи всі останні оновлення, але, схоже, це не працює. (Хоча встановлення пакетного пакету встановлено)

Завершення вкладки працює правильно лише для каталогів або файлів.

Будь-які ідеї, де копати?


Я вирішив цю проблему за допомогою рішення, поданого на сайті askubuntu.com/questions/325807/…
DB

Відповіді:


67

Перевірте, чи є у вашому .bashrc такий фрагмент (повинен бути там за замовчуванням)

# 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

Дякую! Я замінив .bashrc своїм і тому не міг зрозуміти, в чому проблема. Працює зараз ідеально.
Вінок

це виправило моє автозаповнення git bash на xubuntu 12.04 теж велике спасибі.
пальмовий

Як щодо автоматичного завершення перемикання та опції командного рядка apt-get? тобто коли ви вводите apt-get ins, а потім натисніть вкладку, щоб автоматично її виконати.
Reza Ghodsi

3
Я хотів би додати, що пакет bash-completionнеобхідний для цього. Як не дивно, стандартна установка моєї компанії не має цього пакету.
Едгар

13

Я подумав, що я також додам наступне додаткове пояснення провалу завершення bash - це занадто довго для коментарів і може бути корисним для того, хто має проблеми з завершенням bash, оскільки, мабуть, це "загальний" канонічний питання, до якого всі дублікати передаються.

Навіть якщо у вас є відповідний рядок у вашому .bashrc(як у відповіді вище) та bash-completionвстановленому пакеті, завершення роботи bash все ще може не працювати, якщо у вас є shopt -s nullglobабо shopt -s failglobу вашому, .bashrcабо в .bash_aliases.

Наступні сценарії були протестовані з усіма налаштуваннями користувачів .bashrcта .bash_aliasesвидалені, щоб дати справедливий тест, з відповідною лінією заповнення bash в .bashrcтеперішньому та bash-completionвстановленому.

1) Перший сценарій, коли у вас є shopt -s failglobу вашому .bashrcО.Р. .bash_aliases.

При спробі вкладки відповідних каталогів та файлів відповідно відбудуться такі помилки:

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

Однак команди все одно будуть успішно виконані.

2) Якщо shopt -s nullglobввімкнено, спроба вкладки завершити каталог або файл натомість призведе до того, що все перераховано, без завершення:

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

Я скоротив перелік тут, оскільки це було дуже довгим і не потрібно все це відтворювати.

Знову ж таки, виконання команд все одно працюватиме.

Отже, просто видалення shopt -s failglobабо shopt -s nullglobтакож може вирішити проблему помилок із завершенням bash, якщо припустити, що у вас є .bashrcта bash-completionвстановлена відповідна лінія .


1
Приємне пояснення, це вирішило мою проблему, коли я намагаюся заповнити вкладку та сталася помилка >> слова [0] = $ {! Ref} $ {COMP_WORDS [i]}
bagustris

Хоча це працює як вирішення, будь-який програміст із завершення погано розраховувати. Оскільки nullglob (який номінально кращий для багатьох) та kin можуть бути встановлені, будь-який доповнюючий код, який вимагає старої семантики (підстановочні знаки без збігів призводять до самої підстановки), повинен зберігати поточне налаштування глобального типу, встановлювати необхідне та відновити після цього старі налаштування глобуса, як зазвичай використовується IFS.
Алекс Норт-Кіс

10

Окрім зміни /etc/bash.bashrcфайлу (ще інших відповідей), можливо, вам знадобиться встановити bash-completionпакет.

Перевірте, чи /etc/bash_completionфайл виходить. Якщо ні:

sudo apt-get install bash-completion

(У моїй інталяції Debian 7 вона спочатку не була встановлена)


7

Наскільки це може здатися базовим, переконайтеся, що bash - ваша активна оболонка

echo $SHELL

Щойно я перейшов на Ubuntu 14.04.1 LTS і не мав автоматичного заповнення вкладок, навіть після дотримування порад на цій посаді, лише щоб зрозуміти, що моя оболонка була встановлена /bin/shі ні /bin/bash.


2

Оновлення до Ubuntu 14.04.01

Перевірте, чи є у вашому .bashrc такий фрагмент (повинен бути там за замовчуванням)

sudo vim /etc/bash.bashrc (введіть "i" для редагування файлу)

    # 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 рядків вище

Збережіть файл "esc + w + q + enter"

Перезапустити bash

exec bash


1
Що це зробить? Хіба це не за замовчуванням?
Тим

Як говорить @Tim, ця конфігурація надається конфігурацією за замовчуванням.
ssoto

Це працювало для мене
Thamaraiselvam

Ця відповідь спрацювала як шарм, і вона має негативні голоси ???
мазь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.