30

Я понимаю, что если вы ls * он будет фактически расширен до ls a b c когда у тока есть файлы a , b и c .

Мне было интересно, есть ли способ расширить это, прежде чем я нажму Enter. Аналогично тому, как работает Ctrl+X , или работает tab tab .

Так что прояснить

$ ls *
<press magic key>
$ ls a b c

аналогично:

$ ls ~/
<press tab>
$ ls /home/username

Я думал, что видел это раньше, но я мог ошибаться.

5 ответов5

19

В bash возможность readline называется glob-expand-word и по умолчанию связана с Ctrl X * .

17

Вы можете использовать функцию glob-expand-word из man bash:

The word before point is treated as a pattern for pathname
expansion, and the list of matching file names is inserted,
replacing the word. If a numeric argument is supplied, an
asterisk is appended before pathname expansion.

Добавьте что-то подобное в ваш ~/.inputrc:

Control-x: glob-expand-word

Таким образом, $ ls * последующим Ctrl-X в вашем примере расширится до $ ls a b c .

9

Когда вы находитесь в режиме vi (set -o vi), "магический ключ" - это Esc *. Это работает как с bash и с ksh .

3
$ bind -q glob-expand-word
glob-expand-word can be invoked via "\C-x*".

$ bind -q insert-completions
insert-completions can be invoked via "\e*".

Таким образом, чтобы использовать их, мы можем сделать

ls * Ctrl+x *

или же

ls * Esc *

Расширять сложные линии, прежде чем нажать Enter

0

Альтернативой glob-expand-word (\ Cx *) являются вставки-дополнения (\ e *). Он работает без звездочки в конце, но он также включает в себя другие дополнения, такие как скрытые файлы. У меня есть отскок в ~/.inputrc:

# insert glob results (\C-x* by default)
"\C-g": glob-expand-word

# insert completion list (\e* by default)
"\ei": insert-completions

glob-complete-word (\eg) может использоваться для преобразования, например, /System/Library/Launch*/*Finder в /System/Library/LaunchAgents/com.apple.Finder.plist .

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