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

Ric*_*ich 6 bash

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

> cp my_file_name originals/#
Run Code Online (Sandbox Code Playgroud)

其中#代表光标。

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

dog*_*ane 13

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

cp my_file_name Ctrl+ W Ctrl+Y原件/ Ctrl+Y


小智 10

一种方法是使用大括号扩展

cp {,originals/}my_file_name
Run Code Online (Sandbox Code Playgroud)


Den*_*son 6

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

您可以将按键(我将使用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'
Run Code Online (Sandbox Code Playgroud)

或将此添加到您的~/.inputrc

"\C-q": copy-backward-word
Run Code Online (Sandbox Code Playgroud)

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

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

在 shell 提示符下:

bind '"\eq": "\e2\C-q\C-y\e\C-h"'
Run Code Online (Sandbox Code Playgroud)

或在您的~/.inputrc

"\eq": "\e2\C-q\C-y\e\C-h"
Run Code Online (Sandbox Code Playgroud)

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

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