自动完成常用命令行命令?

kra*_*r65 15 command-line bash

对于某些项目,我经常输入几个命令,例如:

cd an/extremely/long/path/in/which/I/have/some/kinda/project
Run Code Online (Sandbox Code Playgroud)

./runmyproject --with some --command line --options set
Run Code Online (Sandbox Code Playgroud)

看到我很懒惰,我尽量避免一次又一次地完整输入这些命令。所以我当然可以经常使用向上键来找回这些命令,但通常,我在两者之间还有很多命令,搜索它比仅仅输入它需要更多的时间。

我现在想知道是否有某种实用程序可以建议我经常使用的完整命令,当我还没有输入所有命令时。这样我就可以例如输入“cd an/”并且它已经建议了路径的其余部分,因为我在过去一个月中使用了很多。

我确实找到了一个叫做 Bash Smart Complete 的东西。但这有点“愚蠢”,因为它没有查看我之前使用的命令。我刚刚也找到了这个 SO answer,它建议将我经常使用的命令放在一个文件中。但是,响应速度不够快,因为每次启动新项目或更改文件夹或程序参数时,我都需要为其创建一个新文件。

有人知道任何其他实用程序或其他方法来实现这一目标吗?或者,有人知道我如何更改 Bash Smart Complete 以便它可以查看我在上个月使用的命令并完成上个月最适合和使用最多的命令吗?

[编辑] 以下是一些非常棒的答案。我还没有将任何标记为明确的答案。不是因为我不喜欢这些答案,我喜欢,而是因为它们都不是绝对的赢家。我认为Finalterm是一个很棒的项目。不幸的是,它的边缘仍然相当粗糙。例如; 它还不支持复制粘贴。不过我会继续关注那个项目,因为当它成熟时,我认为它会是一个很棒的终端应用程序。至于其他答案;他们要么建议创建一个别名,这不是我想要做的,因为它会创建额外的工作而不是取消工作,或者使用 Ctrl+R,这是一个很棒的(我不知道它!)。有几个人建议使用 Ctrl+R,所以我不能真正突出一个答案而不是另一个。

所以现在我肯定使用 Ctrl+R,将来我可能会使用 Finalterm。

感谢所有伟大的回答家伙!

小智 16

如果命令经常使用,它们会记录在 .bashrc 中的命令历史记录 bash 轨道中.bash_history

现在诀窍是:您可以通过按CTRL-r反向搜索此历史记录以重新执行命令。

在反向历史搜索模式中,bash 会在您键入时实时显示历史记录中以您给定输入开头的最新命令。然后按回车接受并执行建议的命令。继续按 CTRL-R 循环到具有相同前缀的旧命令。

这是内置在 bash 中的,无需自定义脚本或安装软件:) 这是 bash 最有用的功能之一,恕我直言。

  • 使用 [**CTRL-g**] 退出历史搜索模式,如果不执行命令(例如如果你没有找到你需要的)。 (3认同)

Max*_*her 8

最后学期

有一个非常有前途的终端应用程序称为Final Term。在其众多功能中,它还具有记忆命令的历史记录,以便您可以选择它。以下是更多功能:

最后学期

您可以在本文中阅读更多相关信息。

这是创作者的网站。http://finalterm.org/

安装它

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm
Run Code Online (Sandbox Code Playgroud)

警告

我说过这是有希望的。唯一的问题是它的版本是 0.1。所以,有些事情好像vimnano还没有很好地工作。我还注意到它还不支持拖放和复制粘贴。但它确实具有您要求的功能。随着软件的成熟,它将成为最好的桌面终端之一。

截屏

这是正在运行的函数:

 行动中的功能

希望这可以帮助。

*我在 Saucy,所以这就是为什么我有蝾螈背景:)


小智 8

将以下内容粘贴 (Ctrl-Shift-V) 到终端屏幕中:

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc
Run Code Online (Sandbox Code Playgroud)

退出 (Ctrl-D) 终端屏幕,然后再次打开终端。

现在您只需输入前几个字符,然后按向上或向下键滚动过滤列表

  • 这是完成工作的最简单的答案! (3认同)

oas*_*may 7

alias对整个命令使用 an ,或将目录添加到$PATH. 此外,您不必将目录更改为要运行它的可执行文件(或脚本或其他任何东西)的位置,因此它相当简单。这两种方法都要求您在更改生效之前重新启动正在使用的终端。

以下是bash alias为您的示例创建一个的方法(将以下行添加到您的~/.bashrc文件中):

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'
Run Code Online (Sandbox Code Playgroud)

这样,您所需要做的就是runmyproject随时随地输入终端,而无需指定选项/参数。

或者,您可以将项目路径添加到$PATH环境变量中。为此,请将以下几行添加到您的~/.bashrc文件中:

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您仍然需要在运行时为可执行文件指定选项/参数。