如何快速更改 Bash 命令中的第一个单词?

如何快速更改 Bash 命令中的第一个单词?

我想使用 Bash 稍微改善我的工作流程,并且我意识到我经常想对不同的可执行文件执行相同的命令。

一些例子:

Git(我想快速更改第二个词):

git diff     foo/bar.c
git checkout foo/bar.c

Cat/rm(只需更改第一个单词):

cat foo/is/a/very/long/path/to/bar.c
rm  foo/is/a/very/long/path/to/bar.c

我知道我可以按Ctrl+a然后Del删除第一个单词,但我想知道是否有更快捷的方法来做到这一点。

答案1

!$扩展到前一个命令的最后一个单词。

所以你可以这样做:

cat foo/is/a/very/long/path/to/bar.c

rm !$

或者:

git diff foo/bar.c

git checkout !$

您的示例恰好只重复了最后一个单词,因此!$效果很好。如果您实际上有很多要重复的参数,并且只想更改第一个单词,则可以使用!*,它会扩展到前一个命令中除第零个单词之外的所有单词。

请参阅手册页的“历史扩展”部分bash。那里有很多灵活性。

答案2

Ctrl+a转到行首,然后Alt+d删除第一个单词。

答案3

我不确定它是否真的会更快,但看看本文,特别是第 3 点:

  1. 使用 ^str1^str2^ 替换上一个命令中的字符串

在下面的例子中,我们首先执行 ls 命令来验证一个文件。后来我们意识到我们想要查看文件的内容。我们不必再次输入整个文件名,只需将上一个命令中的“ls”替换为“cat”,如下所示。

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

答案4

除了@jjlin 的回答之外,您可能对以下提示感兴趣:

  • Ctrl+w删除左边的单词
  • Ctrl+k从光标处删除到命令行末尾
  • Ctrl+u从光标处删除到命令行开头
  • Alt+b将光标向后移动一个单词
  • Alt+f将光标向前移动一个单词
  • $_包含上一个命令行的最后一个参数

有关这些内容的更多信息,请查阅bash手册页的“Readline 命令名称”部分。

例如:

cat foo/is/a/very/long/path/to/bar.c
rm $_

相关内容