我使用 !n ,其中 (n) 是用于执行历史文件中的一行的行号,我想在命令提示符下执行该行,我通过history|less找到该命令提示符。
但有一个命令行历史事件我希望手动修改。如何在命令行中插入历史事件内容而不实际执行它,以便我可以修改然后按回车键?
最好的,
答案1
要请求打印命令而不是在历史替换后执行命令,请添加:p
修饰语,例如!42:p
。生成的命令也将输入历史记录中,因此您可以按 进行Up编辑。
如果您有histverify
选项设置 ( shopt -s histverify
),您将始终有机会编辑历史替换的结果。
这fc
内置提供对历史扩展的有限访问(无字指示符),并允许您在外部编辑器中编辑先前的命令。
您可以使用!prefix
来引用以 开头的最后一个命令prefix
,并!?substring
使用 来引用以 开头的最后一个命令substring
。当您知道自己在寻找什么时,这可以节省大量时间history | less
。
搜索以前历史记录的另一种方法是增量搜索:按Ctrl+R并开始输入您要查找的内容的子字符串。按Ctrl+R转到迄今为止搜索字符串的上一个出现位置,如果走得太远,则按Ctrl+ 。S除Ctrl+ R、Ctrl+S和Backspace普通字符之外的大多数键都会终止增量搜索并发挥其通常的作用(例如,箭头键将光标移动到您到达的行中,Enter以运行命令)。
答案2
另一个小:Alt+#
注释掉当前行并将其移动到历史缓冲区中。
因此,当您组装命令行并且需要发出临时命令来查找文件时,您只需按Alt+ #,发出另一个命令,在历史记录中查找,取消注释并继续。
答案3
您可以在按 Enter 之前使用魔法空间来扩展历史记录。在你的 .inputrc 中,将空间映射到魔法空间:
$if Bash
Space: magic-space
$endif
现在,每当您在历史规范后键入空格时,它都会立即展开 - 如果您想编辑它,这也很方便!
答案4
我通常使用Ctrl+r进行搜索,然后使用Ctrl+e转到行尾而不执行。