我记得在某个地方的 stackoverflow 评论中读过一个技巧,用于在终端中获取文件名列表,但我记不清了。
如果你有一堆文件,例如:
foo-a.txt
foo-b.txt
foo-c.txt
有一个技巧大致如下:
- 类型
cat foo-*
- 按下类似
tab
,backspace
,之类的键esc
(这不起作用,但这是我想知道的步骤) - 命令行现在应该有
cat foo-a foo-b foo-c
请注意,这与基本制表符补全不同,后者在命令下方显示文件名列表。这会将所有文件名放在命令输入中,这样按“enter”键将对所有文件执行 cat。
有人可以启发我吗?
答案1
- 类型
cat foo-*
- 按Ctrl+X然后按*(星号/星号)展开 glob
- 如果不起作用,请运行
bind -p | grep glob-expand-word
并检查是否显示"\C-x*": glob-expand-word
。如果没有,您可以设置它:bind '"\C-x*": glob-expand-word'
- 如果不起作用,请运行
- 命令行现在应该是
cat foo-a.txt foo-b.txt foo-c.txt
glob-expand-word
对比insert-completions
OP 的回答是关于insert-completions
(Esc,*或Alt+ *),它与 类似但不同glob-expand-word
:
glob-expand-word
扩展文件名全局。insert-completions
Tab插入按下后显示的所有可能的完成。
因此,这意味着除了文件名之外,您还可以使用insert-completions
它,例如选项。例如,键入ls --f
,按Esc,*,然后您将获得ls --file-type --format=
,尽管我不确定这有多大用处。
这意味着它在扩展 glob 时的行为会有所不同。例如,如果你输入cat foo-*
并按下Esc, *,它将仅扩展为第一个补全:cat foo-a.txt
。