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

Tif*_*ulS 38 command-line bash auto-completion

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

afoo abar
Run Code Online (Sandbox Code Playgroud)

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

Fab*_*bby 55

对我来说救命的事情是让 bash 循环浏览各种可能性,而不是显示一个愚蠢的列表。

由于 bashreadline用于自动完成,请将以下几行添加到~/.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
Run Code Online (Sandbox Code Playgroud)

然后exit你的终端(或像腻子这样的远程终端)并再次打开它......

例子:

  1. 当你有3个文件:file1file2file3你键入:

    e fTabTabTab
    Run Code Online (Sandbox Code Playgroud)

    它会循环:

    e file1
    e file2
    e file3
    
    Run Code Online (Sandbox Code Playgroud)

    当你想向后循环时,只需点击Shift+Tab

  2. 当你输入:

    very-complicated-command with lots of command line parameters
    
    Run Code Online (Sandbox Code Playgroud)

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

    very?
    Run Code Online (Sandbox Code Playgroud)

    它会为你输入:

    very-complicated-command with lots of command line parameters
    
    Run Code Online (Sandbox Code Playgroud)

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

  • +1,有趣,但是:1. `~/.inputrc` 可能比 `/etc/inputrc` 更可取,2. 我认为你可以直接在 `bash` 中设置它:http://unix.stackexchange.com /q/55203/70524,http://unix.stackexchange.com/a/16926/70524 (2认同)

Rin*_*ind 21

在第一个之后,tab您需要插入更多字母。所以如果你输入

cd a
Run Code Online (Sandbox Code Playgroud)

和打tab你什么也得不到和第二后tab(紧跟)你首先是名称的列表a,然后需要插入一个f有它自动完成剩余如此

cd atabtabftabtab

会导致

cd afoo
Run Code Online (Sandbox Code Playgroud)

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