如何调用先前的命令(不执行)以更改它?

Art*_*s M 14 command-line command-history terminal command history-expansion

我不记得在不运行它的情况下可以获得最后一个命令的技巧:

假设我希望在按下向上箭头键并修改命令时能够访问命令 !1255。那么调用命令的技巧是什么,让它显示在命令行中但不执行,然后通过向上箭头键访问?

我试过放一个回声,但是我在命令之前有一个回声,我不记得如何正确地做到这一点。

Mic*_*ant 21

!1255:p
Run Code Online (Sandbox Code Playgroud)

会这样做

!历史召回
1255是行号
:p打印但不执行

然后你可以使用向上箭头来获取之前的(未执行的)命令,你可以根据需要更改它。

我经常将它与hg("History Grep") - 我最喜欢的别名结合起来。

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'
Run Code Online (Sandbox Code Playgroud)

这将搜索最近历史行上的文本,无论大小写,并以这种方式使用:

当我想搜索最近的 vi 命令来编辑某个文件,然后我想重新使用其中一个来编辑同一个文件但具有不同的文件扩展名时。

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]
Run Code Online (Sandbox Code Playgroud)

我还定义了hga("History Grep All") 来搜索我的整个历史:

$ alias hga
alias hga='history | grep -i'
Run Code Online (Sandbox Code Playgroud)

但我很少使用它,因为我的历史记录(故意)非常大,而且我得到的输出太多,后来影响在我的终端中向后滚动页面。

  • 请注意,`hg` 也是 [Mercurial 的 CLI](https://www.mercurial-scm.org/wiki/TutorialInstall)。 (2认同)

Ham*_*bad 12

在终端中点击Ctrl+ R(这是 emacs 的反向增量搜索键绑定,正如@gnp 在评论中所指出的那样)允许您在历史记录中搜索特定命令。该命令将被显示并且可以在执行前进行编辑。你会看到这样的:

在此处输入图片说明

来源


Gra*_*avy 7

fc命令执行您想要的操作

fc -l <number> 将列出该数字周围的命令历史记录

fc <number>将在vim(或我想的任何默认编辑器中)打开该命令行条目,以便您可以对其进行编辑,然后您可以:wq使用向上箭头使用它。


ado*_*nis 7

在 bashCtl+alt+e中进行 shell 扩展,因此键入!1255然后按此组合将用历史记录条目 1255 的内容替换当前行