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

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

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

less super/long/file/name

其次是:

vim super/long/file/name

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

vim !!!

并让它自动super/long/file/name打开vim

答案1

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

例子

命令#1:

$ echo 1 2 3 4
1 2 3 4

运行#1然后这样:

$ echo !$
echo 4
4

运行#1然后这样:

$ echo !*
echo 1 2 3 4
1 2 3 4

另外,我强烈建议您查看此 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

答案2

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

less super/long/file/name
vim !$

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

答案3

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.

答案4

另一种可能性:

r=super/long/file/name
less $r
vi $r
ls -l $r
chmod 600 $r
cat $r >> some/other/even/longer/file/name
...

为了节省打字,您应该能够super/long/file/name使用制表符补全来输入 等。当然,该变量没有什么特别的r;我选择它只是因为靠近美元符号键。

相关内容