如何快速更改 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 $_

相關內容