Я понимаю, что если вы печатаете, ls *
это фактически расширяется до того ls a b c
момента, когда у текущего есть файлы a
, b
и c
.
Мне было интересно, есть ли способ расширить это, прежде чем я нажму Enter. Аналогично тому, как работает Ctrl + X , или работает tab complete .
Итак, чтобы прояснить
$ ls *
<press magic key>
$ ls a b c
аналогично:
$ ls ~/
<press tab>
$ ls /home/username
Я думал, что видел это раньше, но я мог ошибаться.
bash
autocomplete
globbing
bramp
источник
источник
Ответы:
Вы можете использовать
glob-expand-word
функцию от manbash
:Добавьте что-то вроде этого к себе
~/.inputrc
:Таким образом,
$ ls *
последует Ctrl-Xрасширение$ ls a b c
, в вашем примере.источник
bind -p | grep 'C-x'
чтобы увидеть их.C-x*
моей системой.В bash функция readline вызывается
glob-expand-word
и CtrlX*по умолчанию связана с ней.источник
Когда вы находитесь в
vi
режиме (set -o vi
), «магический ключ» есть Esc*. Это работает с обоимиbash
иksh
.источник
Таким образом, чтобы использовать их, мы можем сделать
ls *
Ctrl+x *или
ls *
Esc *Расширять сложные линии, прежде чем нажать Enter
источник
Альтернативой glob-expand-word (\ Cx *) являются вставки-дополнения (\ e *). Он работает без звездочки в конце, но он также включает в себя другие дополнения, такие как скрытые файлы. У меня есть отскок в ~ / .inputrc:
glob-complete-word (\ eg) может использоваться для преобразования, например,
/System/Library/Launch*/*Finder
в/System/Library/LaunchAgents/com.apple.Finder.plist
.источник