如何在Bash命令行上展开*


34

据我所知,如果你键入ls *它实际上扩展到ls a b c当前直接有文件abc

我想知道在我进入之前是否有办法扩展它。与Ctrl + X的工作方式类似,或者制表符完整

所以要清楚自己

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

以类似的方式:

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

我以为我以前见过这个,但我可能错了。


嗯,我知道的很少,但我所知道的最好的是$ echo * <ENTER>你可以在ls *命令之前做到这一点。当然,这并没有完全触及标签或快捷方式。
barlop 2010年

但也许Linux用户不会做任何像ls *这样的事情,因为它可能不是必需的ls,但是globbing在不同的shell上表现不同所以它不是那么便携,但是方便的话就好了。但在ls的情况下,没有必要。ls * /列出目录但不是ls的目的。
barlop 2010年

Answers:


19

你可以使用glob-expand-wordman中的函数bash

点之前的单词被视为路径名的模式
扩展,并插入匹配的文件名列表,
替换这个词。如果提供了数字参数,则
在路径名扩展之前附加星号。

将以下内容添加到您的~/.inputrc

Control-x: glob-expand-word

所以,$ ls *随后Ctrl-X将扩大到$ ls a b c,在你的榜样。


8
它应该已经受到约束。并且Ctrl-x已经被绑定为一堆东西的前缀。不要bind -p | grep 'C-x'看他们。
丹尼斯威廉姆森2010年

这正是我想要的!谢谢
bramp 2010年

@Dennis,它还没有绑定,但是将它添加到我的.inputrc中了。我猜这是Debian的默认值。
bramp 2010年

2
@Dennis:它C-x*在我的系统上是必然的。
cYrus 2010年


11

当你处于vimode(set -o vi)时,“魔术键”是Esc*。这适用于bashksh


为了清楚vimmers,首先在正常输入命令行时输入星号,然后退出编辑模式,如果你立即逃脱,光标将位于星号上,然后点击星号,光标位于星号,glob将再次展开并退出编辑模式。
NeilG

4
$ bind -q glob-expand-word
glob-expand-word可以通过“\ Cx *”调用。

$ bind -q insert-completions
插入完成可以通过“\ e *”调用。

所以使用这些我们可以做到

ls * Ctrl+x *

要么

ls * Esc *

在输入之前展开复杂的线条


这是最好的答案,因为它查找了确切的键绑定,在不同的环境中可能会有所不同。
wisbucky

0

glob-expand-word(\ Cx *)的替代方法是insert-completions(\ e *)。它最后没有星号,但它还包括其他完成,如隐藏文件。我在〜/ .inputrc中反弹:

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

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

圆顶封装体完整字(\例如)可用于例如转换/System/Library/Launch*/*Finder/System/Library/LaunchAgents/com.apple.Finder.plist

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.