如何在 Bash 控制台上重复当前输入的参数?

如何在 Bash 控制台上重复当前输入的参数?

我只是输入以下内容:

mv foo/bar/poit/zoid/narf.txt

突然我意识到,该死,我必须再次输入该参数的大部分内容:

mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt

即使使用制表符补全,这也是相当痛苦的。我知道我可以通过鼠标选择文本并单击鼠标中键来复制粘贴参数,但这还不够好。我想把手放在键盘上。

有没有办法使用键盘复制粘贴该行的当前参数?

答案1

历史扩展实际上也适用于当前命令,使用事件指示符 !#。将此与词指示符对于最后一个参数$,获取刚刚输入的参数。

你可以使用所有常规的修饰语例如,如果您要重命名远程目录中的文件,您只需键入:

mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname

答案2

如果我提前计划,我会使用大括号扩展。在这种情况下:

mv foo/bar/poit/zoid/{narf,troz}.txt

这是使用默认readline键盘快捷键的另一种方法:

  • mv foo/bar/poit/soid/narf.txt: 开始
  • Ctrl- wunix-word-rubout删除foo/bar/poit/soid/narf.txt
  • Ctrl- y, Space, Ctrl- y: yank, 空格,yank再次得到mv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
  • Meta- backspace, Meta- backspace:backward-kill-word两次删除最后一个narf.txt
  • troz.txt:键入不同的尾部部分

如果您花费大量时间使用 shell bash,我建议您定期阅读默认快捷方式列表,并挑选一些似乎对学习有用的快捷方式并将其纳入您的日常工作中。 bash手册第 8 章是一个很好的起点。了解捷径确实可以提高你的效率。

答案3

正如您的示例中所示,您可以使用下一个构造:

mv foo/bar/poit/zoid/{narf.txt,troz.txt}

甚至(按照建议安斯加尔·埃斯特曼):

mv foo/bar/poit/zoid/{narf,troz}.txt

而不是键入/复制粘贴长地址两次。

答案4

玩了一下我得到了这个工作:

mv foo/bar/poit/zoid/narf.txt

点击Enter
存储最后一个参数。

现在用于获取最后输入的内容。输入一个空格并获取最后使用的参数:

Alt+.

我讨厌引发错误,但它可以在这个用例中完成工作。

相关内容