在 Bash 中我可以将最后输入的参数复制到光标位置吗?

在 Bash 中我可以将最后输入的参数复制到光标位置吗?

假设我的终端中有以下内容:

> cp my_file_name originals/#

其中#代表光标。

是否有组合键可以插入my_file_name光标位置,这样我就不必再次输入它了?我知道ALT+.可以从上一个命令中获取最后一个参数,但我想要当前命令中的上一个参数!

答案1

您可以使用Ctrl+W剪切参数并将其存储在剪贴板中,然后使用Ctrl+Y再次粘贴:

cp 我的文件名Ctrl+ W Ctrl+ Yoriginals/ Ctrl+Y

答案2

一种方法是使用括号扩展

cp {,originals/}my_file_name

答案3

使用起来很复杂,但设置起来更简单:

您可以将击键(我将使用Ctrl- Q)绑定到该readline copy-backward-word函数并执行以下操作:

Alt- 2 Ctrl- Q Ctrl- y Ctrl- Alt-h

这意味着:

  • digit-argument copy-backward-word(抄写前两个词)
  • yank(粘贴)
  • backward-kill-word(删除多余的单词)

要在命令行上绑定按键:

bind '"\C-q": copy-backward-word'

或者将其添加到您的~/.inputrc

"\C-q": copy-backward-word

使用更简单,但设置更复杂:

您可以将长击键序列制成由一次击键触发的宏(我将在这里使用Alt-q并使用上面的Ctrl-绑定):q

在 shell 提示符下:

bind '"\eq": "\e2\C-q\C-y\e\C-h"'

或者在你的~/.inputrc

"\eq": "\e2\C-q\C-y\e\C-h"

请记住,您还需要绑定Ctrl-q如上所述。

现在要复制当前单词之前的单词,只需按Alt- q

答案4

这是另一种方法,虽然我不确定你为什么要做你想做的事情,因为文件名在你的 cp 命令示例中是隐含的(并且可以按预期工作)。

> F=my_file_name && cp $F Workspace/$F

这也可以扩展以重命名文件:

> F=my_file_name && cp $F Workspace/$F.new

相关内容