将历史命令放入命令行而不执行它

Vas*_*ass 76 command-line bash command-history

我使用 !n 其中 (n) 是在我想在命令提示符下执行的历史文件中执行一行的行号,我通过 history|less 找到。

但是有一个命令行历史事件我希望手动修改。如何在命令行中插入历史事件内容而不实际执行,以便我可以修改然后按回车?

最好的事物,

Gil*_*il' 93

要请求在历史替换后打印命令而不是执行命令,请添加:p 修饰符,例如!42:p. 生成的命令也将输入到历史记录中,因此您可以按Up进行编辑。

如果您设置了histverify 选项( shopt -s histverify),您将始终有机会编辑历史替换的结果。

fc内置给人以历史扩展(无字标志)的机会有限,并且让你在外部编辑器中编辑以前的命令。

您可以使用!prefix来引用以 开头的最后一个命令prefix,也可以使用引用以 开头!?substring的最后一个命令substring。当您知道要查找的内容时,这可以节省大量时间history | less

搜索以前的历史记录的另一种方法是增量搜索:按Ctrl+R并开始输入您要查找的内容的子字符串。按Ctrl+R去搜索字符串的前面occurence到目前为止和Ctrl+S如果你已经走得太远了。比其他大多数键Ctrl+ RCtrl+ SBackspace和普通字符终止增量的搜索,并具有其通常的影响(如箭头键移动光标,你已经达到了线,Enter运行该命令)。

  • 在 Ctrl-s 起作用之前,您需要执行 `stty -ixon`。 (10认同)

Rah*_*til 18

另一个小:Alt+#

注释掉当前行并将其移动到历史缓冲区中。

因此,当您组装命令行并且需要发出临时命令来例如查找文件时,您只需点击Alt+ #,发出另一个命令,进入历史记录,取消注释并继续。

  • 也`Esc`,`#` 作品 (3认同)

Cas*_*bel 9

您可以在按 Enter 键之前使用魔法空间来扩展历史记录。在您的 .inputrc 中,将空间映射到魔法空间:

$if Bash
     Space: magic-space
$endif
Run Code Online (Sandbox Code Playgroud)

现在,每当您在历史规范后键入一个空格时,它都会立即展开 - 如果您想编辑它也很方便!


Ale*_*ett 8

看一看history-expand-line命令,Alt+^默认绑定到。它将就地展开该行,然后您可以对其进行编辑。


nik*_*ikc 5

我通常使用Ctrl+r进行搜索,然后使用Ctrl+e转到行尾而不执行。