对不同的命令使用相同的参数

Vla*_*ala 27 bash command-history

这是我发现自己经常做的事情:

less super/long/file/name
Run Code Online (Sandbox Code Playgroud)

其次是:

vim super/long/file/name
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以将上一个命令的参数传递给下一个?所以我想做类似的事情

vim !!!
Run Code Online (Sandbox Code Playgroud)

并让它super/long/file/namevim.

slm*_*slm 31

如果您只想要上一个命令的最后一个参数,请使用!$. 如果您想要来自最后一个命令的所有参数,请使用!*.

例子

命令 #1:

$ echo 1 2 3 4
1 2 3 4
Run Code Online (Sandbox Code Playgroud)

运行 #1 然后这个:

$ echo !$
echo 4
4
Run Code Online (Sandbox Code Playgroud)

运行 #1 然后这个:

$ echo !*
echo 1 2 3 4
1 2 3 4
Run Code Online (Sandbox Code Playgroud)

此外,我强烈建议您查看此 Unix 和 Linux 问答以及@Gilles 的超级用户问答:

冒号语法

您可以将history输出视为网格。每个命令是一行,每个命令的每个参数是一列。像这样的:(!:列)。

所以你可以像这样引用以前的命令:

$ history | grep "105[8-9]"
 1058  echo 1 2 3 4
 1059  echo 5 6 7 8

$ echo !1058:2
echo 2
2
$ echo !1059:3
echo 7
7
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用 `!:n` 获取第 n 个参数,因此在您的示例中,`echo !:3` 将回显 `3`。 (4认同)

gyp*_*tus 30

使用!$应该可以访问 bash shell 中上一个命令的最后一个参数:

less super/long/file/name
vim !$
Run Code Online (Sandbox Code Playgroud)

此外Meta+.Esc+.可以使用,如果readline库在emacs模式(默认选项)启用粘贴的最后一个参数。


Pau*_*ida 8

Miguel de Val-Borro 为您的问题提供了正确、一般的答案,但由于您说您经常执行less和 的特定序列vim,因此值得一提的是,您可以按vinside less 来打开您配置的编辑器。从较少的手册中,在v

Invokes an editor to edit the current file being viewed. The
editor is taken from the environment variable VISUAL if defined,
or EDITOR if VISUAL is not defined, or defaults to "vi" if  nei?
ther VISUAL nor EDITOR is defined.
Run Code Online (Sandbox Code Playgroud)


spu*_*der 5

使用 ESC+.

它将从上一个命令中获取最后一个参数


您也可以进行搜索和替换

less /foo/bar.txt
^less^vim
Run Code Online (Sandbox Code Playgroud)