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