Bash像zsh一样自动完成


28

我正在使用bash,但我想使用zsh样式自动完成功能(单击选项卡,然后通过选项卡选择选项),而不是bash似乎在做什么,它显示了可能性列表,但直到我键入后才选择任何内容还有更多要消除的歧义。如何在bash中获得zsh类型的行为?

寻找解决方案已经找到了许多其他问题的答案,所以我希望我可以在这里得到一个简单的答案(即粘贴到我的内容中.bashrc)。

(要回答一个明显的问题,我需要在这里使用bash,因为我刚刚加入了一个团队,他们做了一些工作来设置bash,以使环境更易于使用。我可能最终可以确保我可以使其保持相同的工作状态的方式使用zsh,但就目前而言,如果我使用bash并使其在交互使用过程中表现得更像zsh,会更容易。

Answers:


22

我用

bind 'TAB:menu-complete'

实现它


11
当我将其添加到.bashrc时,选项卡会在可能的选项中循环显示,而不是在终端中列出它们。是否有可能同时获得两种行为?
Antonios Hadjigeorgalis 2014年

对于Shitf-Tab以完整的倒退,使用bind '"\e[Z":menu-complete-backward'
Ainar-G

24

要获得第一个完成和清单,您可以将以下内容添加到bashrc中

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

show-all-if-ambiguous:这将更改完成功能的默认行为。如果设置为“ on”,则具有多个可能补全的单词会导致立即列出匹配项,而不是按响。默认值为“关闭”。

有关更多信息,请参见Bash手册

编辑:

这不能使bash 完全像zsh tho那样工作。Zsh将完成直到下一个模棱两可的比赛。Bash只会循环所有比赛。

例如

$ ls ~/.ba<tab> .bashrc .bash_history .bash_profile

  • zsh:直到〜/ .bash结束为止,并显示一个匹配列表,可以方便地添加_并<tab>再次命中。
  • bash:仅循环遍历所有〜/ .ba *匹配项。

8
我喜欢使用箭头键和zsh自动补全的视觉指示。有没有办法让bash获得这些行为?我改回以实现更好的服务器兼容性
CESCO

2

在跟进ingkebil的回答,对于那些放bindsetinputrc

$ tail -n 4 /etc/inputrc
# zsh like completion:
# /superuser/288714/bash-autocomplete-like-zsh
set show-all-if-ambiguous on
TAB:menu-complete

我喜欢保持.bashrc清洁。

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.