根据命令历史记录完成命令行


84

因此,我查看了历史记录和Ctrl+ R,但是它们不是我以为我知道的。有什么方法可以输入命令的开头,并通过一些bash快捷方式循环浏览历史记录中的匹配项?

# mysq(some shortcut key)

给我:

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p

旁注:对于不带桌面的tty,有'<kbd> Alt + Tab </ kbd>'。
neverMind9 '18

Answers:


90

Ctrl+ R将打开反向历史记录搜索。现在开始输入命令,这将给出第一个匹配项。再次(再按一次)Ctrl+ R可以循环显示历史记录。

mysq(Ctrl+R)

将给出:

mysqldump  --add-drop-table -e -q -n -C -u 

CtrlR再次+ :

mysql -u ben.dauphinee -p

5
谢谢。同样,Esc将选择的命令放在命令行中而不执行,而Enter将运行选择的命令。
Ben Dauphinee

3
我发现CTRL + E比ESC更好,因为逃脱是很难达到的,但是我已经按下CTRL + R,所以E就在那里。这也将光标定位在行的末尾,这在我想更改某些常见的情况(例如文件名)时非常方便。
Sorpigal

可悲的是,它在Cygwin上不起作用
ATorras

2
至少在Mac上,似乎mysq(CTRL+R)(CTRL+R)没有循环浏览以“ mysq”开头的命令。你需要做的(CTRL+R)mysq(CTRL+R),而不是
BlueRaja -丹尼Pflughoeft

62

为了进一步了解Gilles所说的内容,我将以下内容.inputrc绑定到history-search-backwardhistory-search-forward

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

只需键入一些内容(可选),然后按向上/向下箭头键在历史记录中搜索以您键入的内容开头的命令。

要做到这一点.bashrc,而不是.inputrc,你可以使用:

bind '"\e[A": history-search-backward'

3
这些绑定属于〜/ .inputrc ...感谢您支持我的懒惰。
马丁·泽特勒

值得注意的是,'\ e'至关重要,至少对于bash初学者而言。仅输入Ctrl-V来获取命令的击键并不能说明全部内容。例如,键入Ctrl-V Meta-P(即Alt-P)将返回^ [p-要获得所需的行为,请用“ \ e”替换“ ^ [”。
2015年

同意@syslogic-将行放在.inputrc中,并删除绑定和单引号。
2015年

将其复制粘贴到osx上的.inputrc中,我得到:source〜/ .inputrc -bash:\ e [A ::命令未找到-bash:\ e [B ::命令未找到-bash:\ eOA ::命令找不到-bash:\ eOB ::找不到命令
Walrus the Cat


7

您也可以按PAGEUP按钮以自动完成命令。它基本上搜索bash_history文件。


您必须取消注释两行/etc/inputrc或将这两行添加到$HOME/.inputrc文件中: "\e[5~": history-search-backward "\e[6~": history-search-forward
garlix

5

您可以使用readline命令history-search-backwardhistory-search-forward在以您已经键入的前缀开头的命令行之间导航。这些命令均未绑定到默认配置中的键。

Zsh(zle)具有与history-beginning-search-backward和类似的命令history-beginning-search-forward,默认情况下也未绑定到键。还有history-search-backwardhistory-search-forward,它使用当前命令的第一个单词作为前缀进行搜索,而与光标位置无关。


4

如果您想很好地概述非常相似的命令,则可以使用以下列表:

history|grep KEYSTRING

然后使用鼠标的中键进行复制和粘贴。

Rgds-乔

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.