Завершение вкладки Bash изменило поведение

В течение долгого времени я привык набирать что-то вроде:

$ OPT / Foo / м

и так далее, чтобы перемещаться по моему проекту в разных средах. Это действительно полезно: просто установите $opt (скажем, /home/$USER/projects/opt - и перейдите от своего пользователя dev к qa, чтобы жить, и $ opt - это $ opt.

Начиная с выпуска bash4.2, это поведение изменилось. Теперь завершение табуляции приводит к экранированному знаку $.

$ opt / foo => \ $ opt / foo <= совсем не то, что я имел в виду!

Пока сопровождающие обсуждают, как это должно работать, я хотел бы найти новый набор привычек, которые я мог бы использовать, чтобы вернуться в свою зону комфорта. Что было бы хорошим трюком? Что-то, что мои пальцы могли бы выучить, настроить какой-нибудь рут и идти оттуда, не беспокоясь о том, где я нахожусь.

4 ответа

Решение

Обходные пути, предложенные здесь и в других местах, либо вообще потерпели неудачу, либо были слишком громоздкими, чтобы их можно было набрать

В конце концов, друг рекомендовал использовать zshell (zsh). Оно работает! Я не делал никаких настроек, оставляя свой.zshrc пустым.

Теперь я вернул вкладку в порядок. Это работает немного по-другому, чем я привык: смесь старого стиля bash и vi. Нажатие вкладки отображает список возможных вариантов, затем снова вкладки начнут выбирать из этого списка и чередовать, как vi.

Я очень счастлив.

Это не идеально, но обходной путь состоит в том, чтобы использовать ESC ctrl-e, чтобы принудительно развернуть переменную перед нажатием на вкладку (по крайней мере, в режиме emacs... не уверен насчет режима vi)

Опираясь на ответ Фрэнка: попробуйте добавить следующее в ~/.inputrc:

"TAB": "\M-\C-e\M-\C-t"
"\M-\C-t": complete

затем начните новую оболочку. Что это делает:

  • Изменяет клавишу TAB для вставки двух символов: ESC-Ctrl-e ESC-Ctrl-t.
  • Сопоставляет ESC-Ctrl-t с complete функция, которая обычно вызывается при нажатии клавиши TAB. (Вы можете использовать любую другую комбинацию клавиш вместо ESC-Ctrl-t, но она обычно не используется.)

Поскольку ESC-Ctrl-e уже сопоставлен с shell-expand-line функция, теперь, когда вы нажимаете TAB, Bash сначала расширяет вашу переменную ($opt), затем автозаполнение как обычно.

Zsh Solution - это все, что сработало для меня. Это было тривиальное преобразование моего.bashrc => .zshrc, и у меня есть некоторые сложные функции оболочки / псевдонимы.

Я согласен, как в мире разработчик bash сломал эту самую базовую функциональность завершения вкладок.

Другое решение, которое я не пробовал - это использовать bash из другого дистрибутива. Я видел это только в выпуске Mint 13. Ubuntu/Fedora Bash работает отлично.

Другие вопросы по тегам