Mic*_*ant 18 bash command-history
我经常搜索更改 history | grep 'string'
我在我的历史中得到了一个命令列表,以及历史行号),例如
history | grep 'git'
755 git status
1535 git push origin master
1570 git merge origin/one-146
1667 git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
我现在可以一次性调用并执行命令!nnn,例如:
!755
git status
# On branch master
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何回忆一个编号的历史命令并留在命令行上进行编辑而不是立即“按原样”执行它,这样!做的方式,以便我可以在按下返回键之前更改一些内容?
Mic*_*ant 15
从那以后,我采用了另一种方法 - 使用 ![line-number]:p
这会打印语句并将其添加到历史记录中,但实际上并不执行它。然后我做向上箭头并根据需要更改它。
我将它与我的hg别名 ( alias hg='history | grep ')结合起来以根据某些文本调用历史命令。
例子:
$ hg checkout
17140 git checkout README.rdoc
17143 git checkout master
17201 git checkout README.rdoc
17204 git checkout master
17923 git checkout .bashrc
18151 git checkout v311
Run Code Online (Sandbox Code Playgroud)
除了ctrl- r(反向历史搜索)之外,我还使用它,因为有时我更喜欢查看给定字符串的所有可能性的直接列表,而不仅仅是ctrl-r显示的1 行输出。之后hg [string]我会![line-number]search_string按照hg checkout上面显示的那样做。
如果您设置了该histverify 选项,例如
shopt -s histverify
Run Code Online (Sandbox Code Playgroud)
然后所有历史替换都被调出进行编辑而不是立即执行。然后,您需要Enter在键入!755执行命令后按两次而不是一次。
您可以使用 将任意文本推送到历史列表中history -s。将此与fc -nl列出特定的历史记录条目相结合。
history -s "$(fc -nl 755 755)"
Run Code Online (Sandbox Code Playgroud)
然后按Up可回忆现在最新的历史条目。
您可以使用Ctrl+搜索历史记录R。如果历史条目很长,请使用鼠标(不是键盘,会停止搜索)复制并粘贴部分命令以重新编辑。
正如@rijsg 评论的那样,您可以使用(向左和向右)箭头或等效键停止搜索并开始编辑。