删除命令但保留参数的快捷方式

删除命令但保留参数的快捷方式

在终端工作时,我经常会遇到如下命令序列:

cat long/path/to/file/xyz.file
nano long/bath/to/file/xyz.file
bash long/path/to/file/xyz.file

ETC

通常我会按control + A,向右箭头几次,退格几次,然后编写新命令。

但在我这样做的十秒钟里,我总是想知道是否有一些神奇的捷径可以为我做到这一点。所以我的问题是...

是否有终端快捷方式可以删除命令但保留参数?

如果没有,有没有办法编写自己的快捷方式?

我大部分时间使用的终端是 Ubuntu 和 OSX(如果有的话)。

答案1

在许多shell中,AltD会删除从光标到光标下的单词末尾,因此您可以执行CtrlA以下操作AltD来删除第一个单词。

或者,在具有历史操作的 shell 中,!:1-$将被前一个命令的所有参数替换,因此您可以键入新命令,然后键入该命令来复制前一个命令的参数:

$ echo Hello sudo rm -rf slash
Hello sudo rm -rf slash

$ printf "%s " !:1-$
Hello sudo rm -rf slash

如果您的命令只有单个参数,或者您只对最后一个参数感兴趣,则可以将其缩短为!$;所以在你的情况下

$ cat long/path/to/file/xyz.file
$ nano !$
$ bash !$

答案2

!:1-$除了使用获取所有参数之外,我将提供另一种方法。

您可以使用拼写错误纠正模式^strA^strB来替换strAstrB。例如,之后

$ cat path/to/file

你可以做:

$ ^cat^nano

cat这将更改上一个命令中的第一个匹配项并再次执行该命令。显然,这个技巧在其他情况下可能更有用,例如如果您想在上一个很长的命令中间更改文件名。

答案3

好的。因此,以下内容仅适用于 bash shell,或者我不确定这是否适用于所有 shell。

假设您在每个后续命令中使用命令行参数。
cat long/path/to/file/xyz.file
因此,在下一个命令中,您希望保持参数“long/path/to/file/xyz.file”相同,但想要更改命令,这就是您将如何执行此操作,
nano !$
并且在下一个后续命令中,您将执行相同的操作。bash !$。因此!$保持最后一个命令的最后一个参数不变。例如,
tail -f /var/log/messages
somecommand !$实际上会变成somecommand /var/log/messages而不是somecommand -f /var/log/messages
还有另一个功能可以让您保持最后一个命令不变。例如,您想使用 sudo 权限运行最后一个命令。假设您运行了tail /var/log/messages并且没有查看内容的权限,因此您不必使用 sudo 编写整个命令,只需执行
sudo !!
bash shell 就会自动将其转换为
sudo tail /var/log/messages

相关内容