Выберите конкретный результат из предложений завершения

10

Допустим, у меня есть 3 файла в определенном каталоге: abc.txt, aww.txt, ant.txt

Если я сделаю: cat a(и нажмите вкладку, чтобы увидеть опции), терминал отобразит 3 имени файла:abc.txt, aww.txt, ant.txt

Есть ли способ выбрать n-ый результат, а не набирать его, указав номер индекса в результатах, отображаемых терминалом?

что-то вроде: cat a2получить второй файл ( aww.txt)?

samsamara
источник
Не то, чтобы я знал. В Zsh вы можете перебирать все возможные завершения, нажимая TAB несколько раз (то есть, если вы нажмете TAB 4 раза, завершится ant.txt). Он также может быть настроен так, чтобы можно было перебирать в обратном направлении для лучшей навигации. Это, очевидно, подразумевает изменение оболочки на Zsh. Если вы считаете, что это достаточно хорошая альтернатива, я могу написать ответ.
Кос

Ответы:

11

Предполагая, что вы используете bash, либо добавьте следующее к вашему ~/.bashrc:

bind '"\e[6~": menu-complete'
bind '"\e[5~": menu-complete-backward'

Или, чтобы изменить значения по умолчанию для всех программ, которые используют библиотеку завершения readline, а не только bash, создайте файл, ~/.inputrcсодержащий:

$include /etc/inputrc
"\e[6~": menu-complete
"\e[5~": menu-complete-backward

Теперь, когда вы открываете новый терминал, вы можете нажать:

  • TAB как обычно, чтобы увидеть доступные дополнения.
  • Pg Dn выбрать первое завершение или перейти к следующему.
  • Pg Up выбрать последнее завершение или перейти к предыдущему.
  • Alt+ n, Pg Dnчтобы выбрать n-е завершение или продвинуться вперед на n завершений.

Поэтому для вашего примера введите Pg DnPg Dnили Alt+, 2Pg Dnчтобы получить второй файл aww.txt.

Мартин Торнтон
источник
Давайте представим, что вы используете cdи катаетесь по каталогам. Какую клавишу вы нажимаете, чтобы «выбрать» этот каталог и начать циклическое повторение содержимого этого каталога? Есть ли еще что-то, чтобы установить / связать?
Тони
Альтернатива, если вы не хотите перемещать руки слишком далеко от домашней строки клавиатуры, это использовать Ctrl + Alt + P вместо PageUp и Ctrl + Alt + N вместо PageDown, что можно сделать с помощью bind '"\e\20": menu-complete-backward'и bind '"\e\16": menu-complete'.
Руслан