Вопрос или проблема
В bash, когда TAB привязан к menu-complete, я могу циклически просматривать текущие файлы в лексикографическом или алфавитном порядке.
-
Что если файл, который мне нужен, является последним в порядке? Как я могу получить его быстрее? Это не работает с TAB при нажатии SHIFT.
-
Что если файл, который мне нужен, можно получить быстрее в другом порядке, например, в одном из тех, которые доступны для
ls
: время изменения, размер файла и т.д.
С Tab, привязанным к функции Readline menu-complete
, вы можете получить последнее совпадение, нажав Esc, затем -1 (или просто -), а затем Tab.
Первоначальное нажатие Esc и затем -1
выведет строку с текстом (arg: -1)
, что указывает на то, что вы собираетесь предоставить -1
в качестве аргумента для следующей функции Readline, которую вызываете. Функция menu-complete
использует это, чтобы перейти к соответствующему совпадению.
Из руководства readline(3)
:
menu-complete
Схожа сcomplete
, но заменяет слово для автодополнения на одно из
возможных совпадений. Повторное выполнениеmenu-complete
проходит через
список возможных совпадений, поочередно вставляя каждое. В конце списка
совпадений раздается звуковой сигнал (в зависимости от настройкиbell-style
)
и исходный текст восстанавливается. Аргументn
перемещает наn
позиций вперед в списке
совпадений; отрицательный аргумент может быть использован для перемещения назад по списку.
Эта команда предназначена для привязки кTAB
, но по умолчанию не привязана.
Насколько мне известно, порядок автодополнения изменить нельзя. Имена файлов дополняются в порядке разворачивания шаблонов имен файлов (глобов) оболочкой.
У меня в .inputrc
есть настройка, которая позволяет использовать shift
+ tab
для обратного прохода по опциям:
"\e[Z": menu-complete-backward
Ответ или решение
Теория
Работая с Bash, пользователи часто сталкиваются с необходимостью быстрого навигации по списку файлов в директории. По умолчанию в оболочке Bash нажатие клавиши TAB приводит к автозаполнению имени файла или каталога. Однако, когда клавиша TAB связана с функцией menu-complete
в библиотеке Readline, поведение меняется: последовательное нажатие TAB позволяет пользователю циклически перемещаться по доступным вариантам в лексикографическом порядке.
Основополагающая функция menu-complete
заменяет текущую вводимую строку на один из возможных вариантов автозаполнения. С каждым последующим нажатием TAB идет перебор доступных вариантов, который повторяется в цикле. Это полезно в ситуациях, когда вам нужно выбрать сразу из нескольких файлов или каталогов. Однако бывает неудобно, когда нужный файл располагается в конце списка.
Пример
Допустим, у нас есть следующая структура файлов в каталоге:
file1.txt
file2.txt
file3.txt
file_last.txt
Если мы хотим быстро выбрать file_last.txt
, то последовательное нажатие TAB с циклическим перебором опций menu-complete
может быть затруднительным, поскольку потребуется пройти через все предыдущие файлы.
Применение
Быстрый выбор последнего файла
Для быстрого выбора последнего файла, когда используется menu-complete
, можно воспользоваться комбинацией клавиш ESC, затем -1
и TAB. Этим Bash позволит переместиться к последнему варианту в списке. Подробно:
- Нажмите
ESC
, затем-
. - Вы увидите надпись
(arg: -1)
, показывающую, что следующий вводимый аргумент примет значение -1. - Нажмите TAB. Эта комбинация перенесет вас к последнему доступному варианту списка завершений.
Изменение порядка сортировки
По умолчанию Bash и обобщенные расширения файловых шаблонов не позволяют изменять порядок автозаполения. Однако, можно использовать другие подходы для выбора файла на основе различных критериев, как, например, времени последнего изменения или размера файла, применив команду ls
для сортировки:
-
Используйте команду
ls
с нужными параметрами для предварительного просмотра файлов в нужном вам порядке:ls -lt
— сортировка по времени последнего изменения.ls -lS
— сортировка по размеру файла.
-
После визуального определения интересующего вас файла, вставьте его имя вручную или с помощью частичного автозаполнения.
Дополнительные возможности изменения порядка
Для пользователей, которым необходим более детальный контроль, можно рассмотреть использование скриптовых решений или внешних инструментов, таких как fzf
, которые предоставляют интерактивный интерфейс для быстрого поиска файлов на основе более гибких параметров, нежели стандартные возможности Bash.
Улучшение управления
Создание пользовательских привязок в .inputrc
может значительно улучшить использование menu-complete
. Например, привязка на Shift+Tab
для обратного перебора опций может сильно упростить навигацию:
"\e[Z": menu-complete-backward
Это позволит вам не только быстро перемещаться по вариантам в прямом порядке, но и быстро возвращаться назад, что бывает особенно полезно, если вы случайно промахнулись нужным файлом.
Заключение
Использование автозаполнения в Bash с функцией menu-complete
может существенно упростить ввод длинных имён файлов и каталогов, но требует определенной настройки для повышения своей эффективности. Комбинируя стандартные возможности Bash с пользовательскими настройками и сторонними инструментами, вы получите мощный механизм управления файлами в командной строке. В конечном счете, основная идея заключается в том, чтобы адаптировать среду под свои нужды, находя баланс между удобством и функциональностью.