我如何使bash选项卡完成行为像vim选项卡完成并通过匹配匹配循环?

我一直在寻找这个年份的解决scheme。

由于这个原因,我在操作文件时比vim更加高效。

如果我有

file_12390983421 file_12391983421 file_12340983421 file_12390986421 

在bash中,键入file_1-> tab,它显然列出:

 file_12390983421 file_12391983421 file_12340983421 file_12390986421 

这是一个可怕的公猪和痛苦的工作。

vim中的同一个序列将一次遍历一个文件。

请有人告诉我如何在bash中做到这一点,或者如果有另一个shell可以做到这一点,我会明天切换。

默认情况下, TAB绑定到complete readline命令。 你想要的行为将是menu-complete 。 你可以通过编辑~/.inputrc来改变你的readlines设置。 要重新绑定TAB ,请添加以下行:

 TAB: menu-complete 

有关更多详细信息,请参阅man bashREADLINE部分。

在之上

 # cycle forward Control-k: menu-complete # cycle backward Control-j: menu-complete-backward 

你也可以考虑加

 # display one column with matches set completion-display-width 1 

这样你将保留当前的Tabfunction,并使bash在一列中显示可能性。 所以,而不是

 file_12340983421 file_12390983421 file_12390986421 file_12391983421 

你会得到的

 file_12340983421 file_12390983421 file_12390986421 file_12391983421 

PS您可以从GNU Readline Library网站获取最新的readline库。

感谢@sth,我发现最适合我的是:

要保持正常的bash选项卡完成,然后使用ctl -f在需要时使用菜单完成循环

把它放在你的.inputrc文件中:

 "\Cf": menu-complete 

根据我的经验,答案中提供的解决scheme从来没有完全为我工作。 TL; DR :将set -o vi添加到您的~/.bashrc

当与vi键绑定使用菜单完成时,我必须确保

 set -o vi 

显示在我的~/.bashrc某处。 我从来没有这样做过

 TAB: menu-complete set editing-mode vi set keymap vi 

在我的~/.inputrc

我的猜测是,以某种方式set editing-modeset keymap映像打开了TAB: ...设置,但我没有彻底查看文档,以弄清楚为什么是这种情况。