如何从命令历史记录中自动完成命令?

Spa*_*ler 25 bash command-history autocomplete

bash 是否有一个组合键可以自动竞争历史命令?例如,在 ipython 和 matlab 中,这是通过在键入几个字符后按向上箭头来实现的。

ter*_*don 37

首先,tab使用 bash 会更好,因为它会自动完成 PATH 中的所有可执行文件,而不管它们是否在历史记录中。也就是说,有多种方法可以从您的历史记录中获取命令:

  1. 使用其编号。如果你知道你想要的命令是 3 个命令之前,你可以运行

     !-3
    
    Run Code Online (Sandbox Code Playgroud)

这将重新执行您之前运行过的三个命令的命令。

  1. 搜索它。键入Ctrlr并开始键入任何文本。将显示与您的文本匹配的历史记录中的第一个命令,点击enter将执行它。

  2. 击中?(向上箭头)。这将调出最后一个命令,再次按下它,您将进入您的命令历史记录。当你找到你想要的那个时,点击enter

  3. 将这些行添加到您的~/.inputrc(如果文件不存在则创建该文件):

     "\e[A": history-search-backward
     "\e[B": history-search-forward
    
    Run Code Online (Sandbox Code Playgroud)

要立即加载文件,请运行bind -f ~/.inputrc( source )。现在,键入您之前运行的命令之一的前几个字符并点击?。将显示历史记录中以这些字符开头的第一个命令。?再次点击以查看其余部分,并enter在找到您想要的那个时点击。

  1. 使用history命令。正如@Isaac 所解释的那样,这将列出存储在历史文件中的所有命令。

  • #4 正是我所需要的。#2 也很酷,但 #4 对我来说更自然。 (3认同)

小智 8

您可以使用命令检查历史序列上的命令位置history。然后就可以执行了!<number_in_the_sequence>。我希望这有帮助。