命令历史记录中的命令行补全

Ben*_*nee 106 bash command-history autocomplete

所以,我看过历史和Ctrl+ R,但它们并不是我认为我所知道的。有没有办法可以在命令的开头输入,然后使用一些 bash 快捷方式循环浏览历史记录中的匹配项?

# mysq(some shortcut key)
Run Code Online (Sandbox Code Playgroud)

给我:

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

wag*_*wag 109

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

mysq(Ctrl+R)
Run Code Online (Sandbox Code Playgroud)

会给:

mysqldump  --add-drop-table -e -q -n -C -u 
Run Code Online (Sandbox Code Playgroud)

Ctrl+R再次:

mysql -u ben.dauphinee -p
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。此外,Esc 会将选定的命令放在命令行上而不执行,而 Enter 将运行选定的命令。 (8认同)
  • 至少在 mac 上,`mysq(CTRL+R)(CTRL+R)` 似乎不会循环以“mysq”开头的命令。你需要做`(CTRL+R)mysq(CTRL+R)` (5认同)
  • 我发现 CTRL+E 比 ESC 更好,因为逃避很难达到,但我已经按了 CTRL+R,所以 E 就在那里。这也将光标定位在行尾,以防万一我想更改一些我认为很常见的内容(如文件名)。 (3认同)

ray*_*chi 88

为了扩展 Gilles 所说的内容,我.inputrc将向上/向下箭头键绑定到history-search-backward和 中有以下内容history-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
Run Code Online (Sandbox Code Playgroud)

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

要在.bashrc而不是 中执行此操作.inputrc,您可以使用:

bind '"\e[A": history-search-backward'
Run Code Online (Sandbox Code Playgroud)

  • 这些绑定属于 ~/.inputrc ...感谢支持我的懒惰。 (5认同)
  • 为了让它在你当前的 shell 中工作,运行`bind -f ~/.inputrc` (2认同)

0as*_*am0 10

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


Gil*_*il' 7

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

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


小智 7

如果你想对非常相似的命令有一个很好的概述,你可以得到一个列表:

history|grep KEYSTRING
Run Code Online (Sandbox Code Playgroud)

然后用鼠标中键复制和粘贴。

Rgds - 乔