通常我使用Ctr+R
它来启用反向搜索,并重复Ctr+R
浏览命令历史记录,然后点击Tab
选择命令。
然而,有时我可能想做部分选择,例如
(reverse-i-search)`sh /p': sh /path/to/the/a_script.sh
我已经输入了sh /p
,并且我的历史记录是sh /path/to/the/a_script.sh
,但我知道我b_script.sh
在同一路径下有另一个文件,我想用 来运行命令b_script.sh
。a_script.sh
在这种情况下,我必须Tap
先 ,然后更改a_script.sh
为b_script.sh
手动。
是否可以进行部分选择?例如,仅以sh /path/to/the/
某种方式选择部分。
答案1
并非如此。Ctrl+R搜索您的历史记录,并允许您检索之前输入的命令。
有一些有用的 bash 快捷方式可以加快编辑速度:Alt+ F/B(或者更直观的是Ctrl+ Left/Right)向前或向后跳转一个单词,而Ctrl+K则从光标删除到末尾。
答案2
如果你知道你想要重复的命令是如何开始的(在你的情况下sh
),你可以这样做:
!sh:s/a_/b_
或者更一般地,如果您恰好记得命令中包含的一些字符串,而不是最开头的字符串,则使用: !?string?:s/old/new
以便您可以引用历史列表中当前位置之前的最新命令,string
并对其进行编辑以替换某些部分。因此,您可以使用以下类似方法修复该命令:
!?script?:s/a_/b_
它的局限性在于它只能用于重复和编辑最近输入的命令(它会触发历史记录中与!
和之间的模式匹配的最后一个条目:
),但如果您需要反向搜索整个历史记录,那么 reverse-i-search 是我所知道的唯一方法。