如何调出编号的历史记录命令进行编辑?


17

我经常搜索更改 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

现在,我可以一次调用并执行命令!nnn,例如:

!755
git status
# On branch master
nothing to commit, working directory clean

我的问题是:我该如何调出编号的历史记录命令并停留在命令行上进行编辑,而不是立即按原样执行(这样做的方式)!,以便我可以更改返回之前的几项内容?

Answers:


12

此后,我采用了另一种方法-使用 ![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

除了ctrl- r(反向历史记录搜索)之外,我还使用了此选项,因为有时我更喜欢看到给定字符串的所有可能性的立即列表,而不是仅显示ctrl-r节目。之后,hg [string]我将![line-number]search_string按照上hg checkout图所示进行操作。


8

如果您设定 histverify 选项,例如

shopt -s histverify

然后将调出所有历史记录替换进行编辑,而不是立即执行。然后,您需要按Enter两次而不是键入一次!755命令。

您可以使用将任意文本推入历史记录列表history -s。结合使用fc -nl以列出特定的历史记录条目。

history -s "$(fc -nl 755 755)"

然后按Up来回想一下最新的历史记录条目。


6

您可以使用以下方式搜索历史记录 Ctrl +R。如果历史记录条目很长,请使用鼠标(而不是键盘,它会停止搜索)复制并粘贴部分命令以重新编辑。

正如@rijsg所评论的,然后您可以使用(向左和向右)箭头或等效键停止搜索并开始编辑。


2
任何箭头键或等效命令(Ctrl-a例如)都将停止搜索,而不会执行命令,将当前历史记录条目保留在命令提示符下。根据@Michael的要求,这可能不够,也可能不够。
njsg 2013年

2

如果将.bashrc文件配置为在命令行上使用vi编辑器,它将使命令行编辑的复杂性降低很多。

首先,启用“ set -o vi”后,您只需单击“ <esc> k”,然后继续单击k”即可按原样浏览历史记录文件,如果超过了条目,请使用“ j”往下走

注意:使用vi时,有两种模式:命令和编辑以按ESCAPE KEY ONCE进入命令模式,然后插入a,A,i,I等。

vi中的简单光标垫:左= h,下= j,上= k,右= l http://linuxmeister.net/vi/vi-Summary.jpg

我在以下位置添加了使此工作所需的所有条目:http : //linuxmeister.net/Notes/bashrc-simple.html

因此,基于上面的非常有用的信息,我能够使用“历史记录”并从“历史记录”中检索一行,而无需执行它。(谢谢您的发帖!)

如果shopt被列出并且histverify被“关闭”了!将立即执行,

如果您已添加到.bashrc中,或输入了:shopt -s histverify,则输入!允许编辑,例如:

history
    1  more .bashrc
    2  history
    3  shopt
    4  . ./.bashrc
    5  shopt | grep hist
    6  history
    7  alias
    8  history
    9  shopt
   10  history

->!5

当我按下!5时,以下命令出现,但不执行

###如果histverify为“开”。

shopt | grep hist
cmdhist         on
histappend      on
histreedit      off
histverify      on
lithist         off

请记住,Linus和Richard创造了Linux和GNU工具来利用UNIX。vi编辑器(由Bill Joy创建)是最好的工具之一,因为它可以在UNIX和Linux的每个发行版上使用。

所有其他命令行编辑器都需要加载,并需要其他软件。在Linux(Firefox,Thunderbird和OpenOffice除外)中使用GUI就像用1968年的大众甲壳虫拖曳Diesel 4x4一样……虽然可以使用,但肯定没有任何意义。

记住Kernigan关于GUI的说法,“所见即所得”。


-1
echo !number

然后按向上箭头,删除单词echo并编辑其余内容;按Enter执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.