如何调用前一个命令(不执行)以进行更改?


14

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

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

我尝试放置回显,但是在命令之前有一个回显,我不记得如何正确执行它。


4
如果我正确地理解了您的请求,则可以尝试使用后缀“:p”,例如“!1255:p”
Theophrastus 2015年

@Theophrastus是的,准确的是,我忘记了这个:p部分,似乎无法在Google中找到合适的关键字来找到它……谢谢。
Arturas M

Answers:


21
!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“全部历史记录Grep”以搜索我的整个历史记录:

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

但是我用的不多,因为我的历史记录(故意)非常大,并且输出太多,以后影响到终端中的后退页面。


2
请注意,这hg也是Mercurial的CLI
usandfriends 2015年

1
好的 已添加至答案。
Michael Durrant

12

在终端中点击Ctrl+ R(这是emacs的反向增量搜索键绑定,在注释中以@gnp表示),您可以在历史记录中搜索特定命令。该命令将显示出来,并且可以在执行前进行编辑。您将看到类似以下内容:

在此处输入图片说明

资源


1
谢谢!并不是我的问题的直接答案,但是我不知道这一点,我发现它真的很有用。非常感谢你!
Arturas M

1
同样值得注意的是,Ctrl + R是emacs的反向增量搜索。许多emacs键盘绑定可在许多GNU工具中使用:Ctrl + A,Ctrl + E,Ctrl + K,Ctrl + Y等。
GnP

@gnp感谢您提供信息,我不知道。
Hamza Abbad 2015年

在学习了两个关键的东西之后,我花了长时间适应ctrl-r。1.键入时忽略输出。2.一定要知道够足够唯一您要键入命令
迈克尔·达兰特

7

fc命令执行您想要的

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

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


7

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


在Ubuntu上没有为我做到这一点
Michael Durrant

@MichaelDurrant,我刚刚尝试使用14.04(kubuntu),它对我有用。记录man bashshell-expand-line。也许为gnome-terminal设置了快捷方式。
阿多尼斯2015年

@adonis我从不知道这一点,非常感谢,确实它也符合我的要求。实际上,我可以从该功能中找到更多用途。太棒了!谢谢!
Arturas M

4

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

fc -ln -1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.