3

У меня есть вопрос, похожий на этот, но другой: я хочу, чтобы bash использовал расширение glob в автозаполнении, если это возможно. Например, я хотел бы

$ ls *2.<TAB>

Дать мне:

$ ls mydoc2.
mydoc2.pdf mydoc2.tex mydoc2.txt

Я сталкиваюсь с этой ситуацией довольно часто. В приведенном выше примере я использовал короткий префикс «mydoc», но фактические часто бывают довольно длинными. Это возможно?

Я понимаю, что *2.* расширяется с помощью C-x* , но это другая функция, которая не подходит в этой ситуации (потому что мне нужно выбрать только один файл из списка файлов, которые соответствуют глобусу).

1 ответ1

2

Лучший метод для имитации этого поведения автозаполнения - включить переменную readline show-all-if-ambiguous readline (для отображения возможных завершений, если найдено более одного совпадения), а затем вызвать завершение с readline glob-complete-word readline команда (для выполнения расширения имени пути).


# 1: Enable `show-all-if-ambiguous` in ~/.inputrc

set show-all-if-ambiguous on

show-all-if-ambiguous: Это изменяет поведение по умолчанию функций завершения. Если установлено значение «вкл.», Слова, которые имеют более одного возможного завершения, приводят к немедленному отображению совпадений, а не к звонку. Значением по умолчанию является «off».


# 2a: Check to ensure that `glob-complete-word` is bound.

$ bind -q "glob-complete-word"

glob-complete-word can be invoked via "\eg".


# 2b: If unbound, bind `glob-complete-word` to "\eg".

$ bind '"\eg":glob-complete-word'

glob-complete-word (Mg): слово перед точкой рассматривается как шаблон для расширения имени пути с неявно добавленной звездочкой. Этот шаблон используется для генерации списка совпадающих имен файлов для возможных дополнений.


# 3: Trigger the autocompletion with <META-g> or <ESC-g>

# META => alt      (Windows/Linux)
# META => option   (OSX)

$ ls *2.<META-g>     

# possible completions will be listed (show-all-if-ambiguous)   
mydoc2.pdf mydoc2.tex mydoc2.txt

# glob pathname completion will be performed (glob-complete-word)
$ ls mydoc2.  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .