当有多个文件/目录时,如何使终端自动完成?


32

如果我有几个目录,例如:

afoo abar

有时,当我按Tab键时(例如,“ cd a”然后按Tab键),终端会拒绝自动完成功能,而是打印目录列表。有时它甚至会发出嘈杂的声音。知道如何在这种情况下使其自动完成吗?例如,它可以先显示abar,然后再次显示tab则显示afoo。我在Windows中看到了这种情况,或者在Ubuntu中出现了一些应用

Answers:


46

对我而言,可以挽救生命的事情是让各种可能性循环进行,而不是显示出愚蠢的清单。

当bash readline用于自动补全时,将以下行添加到~/.inputrc

一旦你感到满意,并已低于解决方案彻底测试了几天/周,剪切和粘贴(不要复制!)从相同的设置~/.inputrc,以/etc/inputrc包含系统范围的设置,使这适用于所有用户在系统上(包括客人)。

编码:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

然后exit将您的终端机(或腻子之类的远程终端机)重新打开...

例子:

  1. 当您有3个文件时:file1file2然后file3键入:

    e fTabTabTab

    它会循环通过:

    e file1
    e file2
    e file3
    

    而当您想向后循环时,只需按Shift+Tab

  2. 当您键入:

    very-complicated-command with lots of command line parameters

    下次您需要相同的命令时,只需键入:

    very

    并为您输入:

    very-complicated-command with lots of command line parameters

这将为您节省大量的bash时间!;-)


2
+1的,有趣的,但:1。~/.inputrc可能是最好了/etc/inputrc,和2我觉得你可以设置这bash直接:unix.stackexchange.com/q/55203/70524unix.stackexchange.com/a/16926/70524
muru 2015年

很好,谢谢(谢谢我的投票)。是否有一种通用的方式来显示将要循环通过的选项,从而结合了两个方面的优势?我喜欢使用tab + tab以及文件夹子命令等的可能性,因此我不必全部记住它们(例如git branch <tab through branches>。但是,如果我可以看到列表选项卡中的所有项,那太好了!对于目录和文件ls是查看可用项目的选项,但是,对于子命令来说,并不是那么容易或显而易见,
Erik 2016年

这也适用于PuTTy!只需重新启动一次即可:)
np8

@Erik:显然,您所要求的是可能的,但不会编辑我的答案以使事情变得简单。(删除的旧评论说不可能)
Fabby

18

1号之后,tab您需要插入更多字母。所以如果你输入

cd a

并击中tab您什么也没有,然后tab(立即跟随)一秒钟后,您会得到一个以开头的名称列表,a然后需要插入f使其自动完成其余的名称,因此

cd atabtabftabtab

将导致

cd afoo

2
恕我直言:这是正确的方法。我个人觉得Windows的行为很烦人。考虑以下情况:您有很多以。开头的文件,a而您需要最后一个。当您不小心按下Tab键后,a您必须循环浏览所有可能的补全列表以找到正确的补全。
Tobias

@Tobias:当您在其他系统上意外地过早按下[Tab]时,仍然[Ctrl] [K] ... ;-)
Fabby
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.