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

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

cd an/extremely/long/path/in/which/I/have/some/kinda/project 

 ./runmyproject --with some --command line --options set 

看到我很懒,我试着避免一次又一次地完全输入这些命令。 所以我当然可以使用up-key来找回那些命令,但通常,我之间也有很多命令,搜索它需要的时间比打字要多得多。

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

我找到了一个名为Bash Smart Complete的东西。 但这有点“愚蠢”,因为它没有看到我之前使用过的命令。 我刚刚发现了这个SO答案 ,它建议把我使用的命令放在一个文件中。 但是,由于我每次启动新项目或更改文件夹或程序参数时都需要为它创建一个新文件,因此响应不够。

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

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

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

感谢所有伟大的答案!

如果经常使用这些命令,它们将记录在.bash_history中的命令历史记录bash轨道中。

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

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

这是内置的bash,不需要自定义脚本或安装软件:)这是bash,imho最有用的function之一。

将以下内容粘贴(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 

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

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

最后期限

有一个非常有前途的终端应用程序称为最终期限 。 在其众多function中,它还具有记忆命令的历史记录,因此您可以选择它。 以下是一些更多function:

最后期限

您可以在本文中阅读有关它的更多信息。

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

安装它

 sudo add-apt-repository ppa:versable/finalterm-daily sudo apt-get update sudo apt-get install finalterm 

警告

我说它很有希望。 唯一的问题是版本为0.1。 所以像vimnano这样的东西还不行。 我还注意到它还不支持拖放,复制和粘贴。 但它确实具有您要求的function。 随着软件的成熟,它将成为桌面最好的终端之一。

截图

这是function:

功能在行动

希望这可以帮助。

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

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

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

 alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set' 

这样,您需要做的就是将runmyproject输入到终端,无论您身在何处,都无需指定选项/参数。

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

 PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH export PATH 

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

当我发现自己经常需要更改为这样的目录时:

 cd an/extremely/long/path/in/which/I/have/some/kinda/project 

我会这样做一次:

 ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project 

从那时起,使用:

 cd ~/pr[tab] 

到那个时刻:

 ./runmyproject --with some --command line --options set 

我会使用bash历史搜索。 在命令提示符下,按Ctrl-R并键入“runmy”。 瞧,最后输入的所有选项的整个命令就在那里重新输入。 如果我不喜欢上次使用的选项并想查看前面的命令,我会继续按Ctrl-R来循环显示包含“runmy”的所有先前命令。

如果你不喜欢符号链接的想法,Ctrl-R历史搜索也可以帮助’cd’命令。 [Ctrl-R] / proj很可能会将用于cd的最后一个命令带回该目录。

我总是喜欢学习使用bashfunction来帮助解决这类问题,而不是添加别名或切换到特殊的shell。 这样我可以在远程机器上使用相同的function,或者如果我必须坐在同事的终端上。

点击键盘上的控制+ r – 它会让你进入反向历史模式,你可以输入你知道的部分,整个命令将会显示

此处列出了其他方法

http://www.talug.org/events/20030709/cmdline_history.html

我倾向于使用控制R最多

试试这个…这适用于历史文件中的所有命令…与Ctrl + R相同,但我认为这更直观:)

  1. 编辑/etc/inputrc

     sudo vim /etc/inputrc 
  2. 取消注释或添加这两行

     "\e[5~": history-search-backward "\e[6~": history-search-forward 
  3. 注销/登录


然后尝试编写历史中列出的一些命令…

喜欢…

 ls -lah 

 ls 

并按

Page UpPage Dn通过历史文件导航,搜索以“ls”开头的命令

如果你做的一切正确,它应该自动完成你的命令……