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

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

我不记得无需运行即可获取最后一个命令的技巧:

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

我尝试添加回显,但随后在命令之前有回显,我不记得如何正确执行此操作。

答案1

!1255:p

会做这个

!是历史调用
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'

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

当我想搜索最近的 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]

我还定义hga(“History Grep All”)来搜索我的整个历史记录:

$ alias hga
alias hga='history | grep -i'

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

答案2

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

在此输入图像描述

来源

答案3

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

答案4

您想在指定列表时使用 fc 命令而不是执行 (-l)

fc -ln -1

相关内容