Как разрешить bash автозаполнению подстановочные знаки?

10

Если у меня есть каталог, содержащий файлы

foo.bar.a.cat
foo.bar.a.hat

и я набираю ls f+ TABоболочка bash для автозаполнения до ls foo.bar.a.. Если я наберу ls *bar*+, TABя бы хотел, чтобы он автоматически заполнялся до *bar*.a.. Это возможно?

Это похоже на вопрос

Как включить табуляцию подстановочных знаков в bash?

но предложенный ответ, "это работает из коробки для меня", не делает. Я тоже пытался TAB TAB, без эффекта. Команда `` bash gives- версия GNU bash, версия 4.2.37 (1) -релиз (x86_64-pc-linux-gnu) `.

Увлеченные
источник

Ответы:

14

Вы хотите либо:

Вставки-пополнения

ALT* для «вставить все дополнения»

При этом каталог, содержащий файлы с именем «aa ab ac ad»,
ls a*за которым alt + *следуетls aa ab ac ad

Запись справочной страницы по привязке:

вставка-завершение (M- *)

Вставьте все дополнения в текст до точки, которая была бы сгенерирована возможными дополнениями.

расширяющийся шарик-слово

В некоторых системах вышеупомянутое не будет работать с подстановочными знаками, следующее работает на таких системах для меня:

ctrlx, *(Два удара комбо)

Пример: я заполнил каталог:

touch {a,b,c,d,e,f}{1,2,3,4,5,6,7,8,9,0}00{a,b,c,d,f,e}

Затем я ls *100*следую ctrl + x, *, что превращает мою readline в:

ls a100a a100b a100c a100d a100e a100f b100a b100b b100c b100d b100e b100f c100a c100b c100c c100d c100e c100f d100a d100b d100c d100d d100e d100f e100a e100b e100c e100d e100e e100f f100a f100b f100c f100d f100e f100f

Запись справочной страницы для привязки:

glob-expand-word (Cx *)

Слово перед точкой рассматривается как шаблон для расширения пути, и вставляется список совпадающих имен файлов, заменяя слово. Если указан числовой аргумент, перед расширением пути добавляется '*'.

Man Page

скромный
источник
Это не работает (по крайней мере, для меня). Создание файлов touch aa ab ac adи ввод с ls aпоследующим вводом alt+*приводит к появлению списка, но не делает этого ls a*. Подстановочные знаки являются точкой вопроса.
подключен
@Hooked Это работает для меня на GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)и , GNU bash, version 4.2.0(1)-release (x86_64--netbsd)но не GNU bash, version 4.2.45(2)-release (i386-apple-darwin12.2.0). И, работая, я имею в виду это подано в тексте. Проверим мои файлы conf, чтобы увидеть, есть ли у меня что-то дополнительное.
скромно
Странно, почему такая простая вещь меняется с версии на версию? Любые идеи о том, как включить его или он встроен во время компиляции?
подключил
@ Заболел, я тоже немного озадачен ... Это также не GNU bash, version 4.2.37(1)-release (arm-unknown-linux-gnueabihf)сработало на моем Raspberry Pi (Rasbian)
скромно
@Hooked Нашел для меня аллитерационную привязку, которая работает в системах, где первая не имела.
скромно
8

Попробуйте добавить это в ~ / .inputrc:

set show-all-if-ambiguous on

show-all-if-ambiguous заставляет нажатие табуляции один раз (а не дважды) выводить список всех завершений. Это также заставляет первую вкладку нажимать на вставку общих префиксов выражений glob.

$ touch 1.0.{1,2}
$ echo *0* # I pressed tab once here
1.0.1  1.0.2
$ echo 1.0.

glob-complete-word (\ eg) также будет завершено *0(без *конца) до 1.0.. Это также завершает, например, /System/Library/Launch*/*Findeдля /System/Library/LaunchAgents/com.apple.Finder.plist.

Если вы хотите преобразовать *в 1.0.1 1.0.2в примере выше, используют либо вставки-пополнения (\ е *) или Глоб расширяющееся слово (\ Се *).

LRI
источник
4

Эта проблема вызвана ошибками в пакете "bash-creation".

Когда пакет не установлен, bash выполняет его завершение по умолчанию, это довольно хороший обобщенный механизм завершения имени файла.

Предполагается, что пакет «bash-complete» просматривает остальную часть строки и «умен» в отношении списков, которые он генерирует. Однако он не может успешно продублировать расширение "glob".

Лично я думаю, что пакет слишком старается и в итоге может быть использован только «самым глупым обычным пользователем».

Однако перед его удалением вы можете проверить верхнюю часть файла "/ usr / share / bash-завершении / bash_completion", чтобы найти полезные дополнения к вашему .bashrc для "грубой настройки" встроенного завершения bash.

Кстати: в нем более ста зарегистрированных ошибок ... https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=bash-completion

user3710044
источник
$ sudo yum erase bash-complete # исправил проблему для меня
user2449151