从完成建议中选择特定结果


10

假设我在特定目录中有3个文件: abc.txt, aww.txt, ant.txt

如果我这样做:(cat a然后按Tab键查看选项),终端将显示3个文件名:abc.txt, aww.txt, ant.txt

通过在终端显示的结果中指定索引号,有什么方法可以选择第n个结果而不是输入?

类似于:cat a2获取第二个文件(aww.txt)?


不是我知道的。在Zsh中,您可以遍历所有可能多次击中TAB的补全(例如,击中TAB 4次即可完成ant.txt)。还可以设置它,以便可以向后迭代以更好地导航。显然这意味着将外壳更改为Zsh。如果您认为这是一个足够好的选择,我可以为此提供答案。
kos 2015年

Answers:


11

假设您正在使用bash,请将以下内容添加到您的中~/.bashrc

bind '"\e[6~": menu-complete'
bind '"\e[5~": menu-complete-backward'

或者要更改所有使用readline完成库的程序的默认值,而不仅仅是bash,请创建~/.inputrc包含以下内容的文件:

$include /etc/inputrc
"\e[6~": menu-complete
"\e[5~": menu-complete-backward

现在,当您打开一个新终端时,可以按:

  • TAB 正常查看可用的完成情况。
  • Pg Dn 选择第一个完成或更改为下一个。
  • Pg Up 选择上一个完成或更改为上一个。
  • Alt+ n Pg Dn选择第n个补全或向前移动n个补全。

因此,对于您的示例,键入Pg DnPg DnAlt+ 2Pg Dn获取第二个文件aww.txt


让我们假装您正在使用cd目录并对其进行循环。您按什么键“选择”该目录并开始循环该目录的内容?还有另一件事要设置/绑定吗?
托尼

如果您不希望将手从键盘的主行移得太远,可以使用Ctrl + Alt + P代替PageUp,而Ctrl + Alt + N代替PageDown,可以通过bind '"\e\20": menu-complete-backward'和来完成bind '"\e\16": menu-complete'
Ruslan
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.