bash - 获取我正在通过历史编辑的当前命令的第一个参数,或类似的?

bash - 获取我正在通过历史编辑的当前命令的第一个参数,或类似的?

我经常在 bash 提示符下编写命令,我想在当前行中获取先前的参数,然后将其放入命令中的其他位置。

一个简单的例子是,如果我想重命名一个文件。我会

  • 键入mv命令
  • 输入我要移动的文件名,~/myTestFileWithLongFilename.txt
  • 现在我只想更改我在第一个参数中提供的文件的扩展名,而无需再次输入。

我可以以某种方式使用历史记录或 bash 完成来自动完成第一个参数吗?

$ mv ~/myTestFileWithLongFilename.txt ~/myTestFileWithLongFilename.md

我当然知道我可以执行不完整的命令,将其放入历史记录中,然后用 引用它!$,但是我的历史记录被无效命令污染了,我想知道是否有更好的方法

答案1

这是可能的,但有点麻烦。在 bash!#中指的是已经输入的整行。您可以指定要在之后引用的给定单词:,在本例中为!#:1。您可以使用shell-expand-line内置的 readline 键绑定 将其展开Control- Alt- e

答案2

为了减少该命令所需的输入量mv,可以使用大括号扩展:

mv ~/myTestFileWithLongFilename.{txt,md}

大括号扩展扩展为~/myTestFileWithLongFilename.txt后跟~/myTestFileWithLongFilename.md(正确的顺序很重要{txt,md})。

bash无论您是在命令行还是在脚本中键入大括号扩展,它们都会起作用。

大括号扩展 ,prefix{word1,word2,word3}suffix将为实际大括号中的每个重复重复prefixsuffix字符串wordN,生成三个单独的单词prefixword1suffix, prefixword2suffix, 和prefixword3suffix。您还可以在大括号扩展中使用范围,例如{1..4}或。{p..u}

答案3

交互地,alt+1然后 alt+ .(句号)。

重复alt+.可进一步返回命令历史记录,从最近命令之前的命令中提取标记 #1。 (命令本身是标记 #0, alt+ 0

如果没有 alt-<token-number>修饰符,alt-.将采用最后的上一个命令的 arg。例如mkdir foo/ cdalt+。返回创建一个目录并将 CD 放入其中。

通常,对于除最后一个标记(一次修改的击键)以外的任何内容,我只需向上箭头、control-w 或 alt+d,然后按 control-y 来删除该单词并将其拉回,以免弄乱我的历史记录,然后向下-箭头和 control-y 再次将其拉到我正在编辑的命令行中我想要的位置。顺便说一句,这是在 bash 中。

答案4

使用set -o vi,按 escape byw$p(您可能需要添加空格等,并且可能需要BW)。然后你只需要修改一下即可。

相关内容