Bash自动完成:首先列出文件,然后循环浏览它们


27

是否可以通过以下方式配置bash,使其在第一个选项卡自动完成时列出所有可能的文件,并在随后的循环中进行选择?

这两个选项很容易分别完成,我可以将它们绑定到不同的键,但是上面的方法很完美,但是我在网上找不到任何关于它的信息。


3
自从我使用ZSH已经有一段时间了,但是我相信它的自动完成功能是这样的。
jordanm 2012年

1
@jordanm好吧,如果没有其他选择,那么这似乎是一个选择,但这也需要将所有内容从.bashrc等更新为ZSH等效项,我很想避免。
Voo

Answers:


31

这似乎接近您想要的:

bind "TAB:menu-complete"
bind "set show-all-if-ambiguous on"

1
几乎完美,除了它还会在第一个选项卡上自动完成的小缺陷之外,如果我只是想弄清楚确切的名称,这可能会有点烦人(即,如果我想删除更多的字符,然后更改),但我非常愿意接受这一点。
Voo 2012年

1
如何轻松撤消此操作?
dingalapadum 2015年

1
bind "TAB:complete"; bind "set show-all-if-ambiguous off"
吉姆·巴黎

13
@Voo添加第三行将bind "set menu-complete-display-prefix on"仅在第一个选项卡上列出候选对象,而不会自动完成。
Naitree 2015年

2
@Naitree无法充分支持您的建议。它可以正常运行,并且比默认的bash行为要好得多。谢谢。
JBeurer '16

1

这就是我用的。据我所知,它确实可以满足您的需求。

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

这适用于Mac(10.13&10.14)和Ubuntu(16.04&18.04)。


0

你有没有考虑过?它在超级用户中被引用...

[[ $- = *i* ]] && bind TAB:menu-complete

1
menu-complete只是问题的一半。正如问题所言,“ [两种选择都容易分开进行”
jw013

是的,我知道如何将行为更改为两个选项之一,但这很简单。真正的问题是如何将两者结合在一起。
Voo 2012年
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.