Как сделать автозаполнение терминала при наличии нескольких файлов / директорий?

32

Если у меня есть несколько каталогов, например:

afoo abar

иногда мой терминал будет отказываться от автозаполнения, когда я нажимаю tab (например, «cd a», затем tab), и вместо этого печатаю список каталогов. Иногда он даже издает шумный, раздражающий звук. Есть идеи, как сделать автозаполнение в подобных случаях? Например, он может показывать сначала abar, а затем afoo, если я снова нажму tab. Я видел, что это имеет место в Windows, или какое-то приложение в Ubuntu

TifatulS
источник

Ответы:

46

Что-то, что спасает меня для жизни, - это циклично использовать возможности, а не показывать тупой список.

Поскольку bash использует readlineдля своего автозаполнения, добавьте следующие строки в~/.inputrc

После того, как вы удовлетворены и тщательно протестированы ниже раствора в течение нескольких дней / недель, вырезать и вставить (не копировать!) Одни и те же параметры из ~/.inputrcк /etc/inputrcкоторой содержит системные настройки, что делает его доступные для всех пользователей системы (включая гостя).

Кодез:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

затем exitваш терминал (или удаленный терминал, как замазка) и снова открыть его ...

Примеры:

  1. Если у вас есть 3 файла: file1, file2и , file3и вы наберете:

    e fTabTabTab

    это будет проходить через:

    e file1
    e file2
    e file3

    и когда вы хотите вернуться назад, просто нажмите Shift+Tab

  2. Когда вы печатаете:

    very-complicated-command with lots of command line parameters

    и в следующий раз, когда вам понадобится та же команда, вы просто наберете:

    very

    и он напечатает для вас:

    very-complicated-command with lots of command line parameters

Это сэкономит вам массу времени в bash! ;-)

Fabby
источник
2
+1, интересно, но: 1. ~/.inputrcможет быть предпочтительнее, чем /etc/inputrc, и 2. Я думаю, вы можете установить это bashнепосредственно: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
Муру
Это очень приятно, спасибо (и мой голос). Есть ли универсальный способ показать варианты, через которые он будет проходить, который сочетает в себе лучшее из обоих миров? Мне нравится возможность вкладок + вкладок с папками и подкомандами и т. Д., Поэтому мне не нужно запоминать их все (например git branch <tab through branches>, если бы я мог видеть список и вкладку по его элементам, это было бы здорово! Для каталогов и файлов lsможно посмотреть, какие элементы доступны, но, к сожалению, для подкоманд это не так просто и очевидно
Эрик
Это работает и на PuTTy! Просто пришлось один раз его перезапустить :)
np8
@Erik: Видимо, то, что вы просили, возможно, но я не собираюсь редактировать мой ответ, чтобы все было просто. (удалил старый комментарий, что это невозможно)
Fabby
18

После 1-го tabвам нужно вставить больше букв. Так что если вы введете

cd a

и ударите, tabвы ничего не получите, и через секунду tab(сразу после) вы получите список имен, начинающихся с, aа затем необходимо вставить, fчтобы он автоматически завершил оставшуюся часть так,

cd atabtabftabtab

приведет к

cd afoo
Rinzwind
источник
2
ИМХО: Это правильный путь. Я лично нахожу поведение окон очень раздражающим. Рассмотрим случай, когда у вас много файлов, начиная с которых, aи вам нужен последний. Когда вы случайно нажмете клавишу Tab после aтого, как вам придется циклически перебирать список всех возможных дополнений, чтобы добраться до нужного.
Тобиас
@Tobias: когда вы случайно нажали [Tab] слишком рано, используя другую систему , все еще есть [Ctrl] [K] ... ;-)
Fabby