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

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

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

afoo abar

有时当我按下 Tab 键时,我的终端会拒绝自动完成(例如“cd a”然后按 Tab 键),而是打印目录列表。有时它甚至会发出嘈杂、烦人的声音。有什么想法可以让它在这种情况下自动完成吗?例如,它可以先显示 abar,然后如果我再次按下 Tab 键,显示 afoo。我看到 Windows 或 Ubuntu 中的某些应用程序就是这种情况

答案1

对我来说,一件可以拯救我生命的事就是让 bash 循环显示所有可能性,而不是显示一个愚蠢的列表。

由于 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你的终端(或像 putty 这样的远程终端)并再次打开它...

例子:

  1. 当您有 3 个文件:file1file2file3并且您输入:

    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
    

这将为你节省大量时间!;-)

答案2

第一个字母之后,tab你需要插入更多字母。因此,如果你输入

cd a

并点击tab你什么也得不到,一秒钟后tab(紧接着),你会得到一个以 开头的名字列表a,然后需要插入一个f让它自动完成剩余的部分,所以

cd atabtabftabtab

将导致

cd afoo

答案3

要在 Bash 中执行此操作,请将以下内容添加到您的 bash 文件中:

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

效果很好。(摘自这里正如@muru 在评论中提到的那样)

答案4

Linux 版 Fig 处于测试阶段:https://fig.io/user-manual/linux

它运行良好,并具有许多其他功能,Ubuntu 是其支持的发行版之一。

相关内容