我一直想为YEARS找到解决方案。
由于这个原因,我在操作文件时比bash更有效率。
如果我有
file_12390983421
file_12391983421
file_12340983421
file_12390986421
在bash中输入file_1->标签,它显然列出了:
file_12390983421 file_12391983421 file_12340983421 file_12390986421
这是一个可怕的工作和痛苦的工作。
vim中的相同序列将一次循环一个文件。
请有人告诉我如何在bash中执行此操作,或者如果有另一个shell可以执行此操作,我明天会切换。
答案 0 :(得分:79)
默认情况下TAB
绑定到complete
readline命令。您期望的行为将是menu-complete
。您可以通过修改~/.inputrc
来更改您的阅读线设置。要重新绑定TAB
,请添加以下行:
TAB: menu-complete
有关详细信息,请参阅READLINE
中的man bash
部分。
答案 1 :(得分:15)
对于bash> = 4,您可能会喜欢这些设置:
# If there are multiple matches for completion, Tab should cycle through them
bind 'TAB':menu-complete
# Display a list of the matching files
bind "set show-all-if-ambiguous on"
# Perform partial completion on the first Tab press,
# only start cycling full results on the second Tab press
bind "set menu-complete-display-prefix on"
此设置类似于Vim' set wildmode=longest:full:list,full
我从Unix上的this question中提取了这些设置。 Linux网站。
答案 2 :(得分:14)
在
之上# cycle forward
Control-k: menu-complete
# cycle backward
Control-j: menu-complete-backward
您也可以考虑添加
# display one column with matches
set completion-display-width 1
这样您就可以保留当前的Tab功能,并使bash在一列中显示可能性。而不是
file_12340983421 file_12390983421 file_12390986421 file_12391983421
你会得到
file_12340983421
file_12390983421
file_12390986421
file_12391983421
P.S。您可以通过此The GNU Readline Library网站获取最新的readline
库。
答案 3 :(得分:6)
感谢@sth,我找到了最适合我的方式:
要保持正常的bash选项卡完成,然后使用ctl-f在需要时使用menu-complete循环
将它放在.inputrc文件中:
"\C-f": menu-complete
答案 4 :(得分:0)
根据我的经验,我在答案中提供的解决方案对我来说从未完全奏效。 TL; DR :将set -o vi
添加到您的~/.bashrc
。
将menu-complete与vi键绑定结合使用时,我必须确保~/.bashrc
具有:
set -o vi
对于我的~/.inputrc
来说,仅仅拥有:
TAB: menu-complete
set editing-mode vi
set keymap vi
我的猜测是set editing-mode
和set keymap
以某种方式破坏了TAB: ...
设置,但我没有彻底查看文档以找出原因。