我想使用 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 点:
- 使用 ^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 $_