如何在 BASH 中循环反向搜索?

Vil*_*age 638 bash

在终端中,我可以输入Ctrl+R来搜索之前在 BASH 中输入的匹配命令。例如,如果我输入Ctrl+ Rthen grep,它会列出我的最后一个grep命令,我可以按回车键来使用它。不过,这只给出了一个建议。有什么办法可以循环浏览其他以前键入的匹配命令吗?

Run*_*ium 851

如果我正确理解了这个问题,您应该能够通过反复点击Ctrl+来循环选择其他选项R

例如:

  • Ctrl + R
  • grep
  • Ctrl + R
  • Ctrl+ R ...

这会在您的历史记录中向后搜索。要向前搜索,请使用Ctrl+ S,但您可能需要在此之前设置:(stty -ixon通过.bash_profile或手动)以禁用接管Ctrl+的 XON/XOFF 功能S。(更多细节在这里。)

  • @wiswit `CTRL+SHIFT+r` 对我不起作用。 (33认同)
  • +1 -- 仅供参考 -- 您也可以根据 [this StackOverflow answer](http://stackoverflow.com/a/791800/568884) 向前搜索。 (27认同)
  • @MaximSuslov 看到这个问题:http://stackoverflow.com/questions/791765/unable-to-forward-search-bash-history-similarly-as-with-ctrl-r/791800#791800 你可以添加`[[ $ - == *i* ]] && stty -ixon` 到你的 .bashrc,然后 `CTRL+s` 将作为 `CTRL+r` 的反向工作 (12认同)
  • 如果您碰巧经过,请使用 Ctrl+Shift+r 进行反向滚动。 (11认同)
  • @JordanArseno 我将“向前搜索”表示“搜索我尚未输入的命令” (10认同)
  • 我刚刚尝试了`STRL+s`,它冻结了我的终端。值得一提的是,您可以按照 https://unix.stackexchange.com/a/12108/265674 使用 `CTRL+q` 解冻它 (3认同)
  • #ThingsThatIshouldProbablyHookedUp20YarsAgo (2认同)
  • `stty -ixon` 是我 25 年来一直需要寻找的缺失部分。不敢相信,在我用谷歌搜索它之前,它让我恼火了这么久!:D (2认同)

Sat*_*yam 299

如果你觉得这个命令会经常使用,你可以添加一个标签

command #useful
Run Code Online (Sandbox Code Playgroud)

然后

Ctrl + R #useful

这是有效的,因为它#是一个注释分隔符,即符号后面的所有内容都不会被解释为命令。但是,它会记录在历史中,因此可以搜索。

  • Unix 在它很酷之前就有标签 :))) (22认同)
  • 通常我喜欢这种标记。#trg_bld #open_log (8认同)
  • @SudipBhandari 就在您的命令之后。# 开始评论。例如 ls -lah #useful (8认同)
  • 在哪里添加这个标签? (2认同)
  • 这更像是一个黑客,一段时间后`.bash_history` 被刷新。使用 [bash aliases](https://askubuntu.com/questions/17536/how-do-i-create-a-permanent-bash-alias) 会更舒服 (2认同)

l0b*_*0b0 61

您还可以通过将这些行添加到 ~/.inputrc 来设置向上和向下箭头以进行稍微不同的搜索:

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

它不会在命令中的任何位置搜索子字符串(如Ctrl-r),而是会搜索从光标左侧的文本开始的命令。例如,如果我运行这些命令:

$ ls bart
$ ls fools
Run Code Online (Sandbox Code Playgroud)

然后键入ls并按Up两次,它将ls bart在同一位置显示和光标。与Ctrl-比较r,它会ls在最后一行中找到两次,因此您必须再次按下它才能找到上一行。

这两种方式各有千秋,都可以节省不少时间。

  • 这也是 OS X 上的标准,所以你不需要创建 `~/.inputrc` 并添加这两行。 (4认同)
  • 这在我的 macOS (10.13) 上不是标准配置。我一直很怀念这个功能! (2认同)

小智 14

有一个Ctrl + R名为hstr 的内置替代品。它允许同时搜索与所有搜索标记匹配的命令历史记录(除其他外),并使用箭头键循环查看结果:

例子

这是一个演示截屏视频

它可以安装在 Debian 系列操作系统上,例如:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

然后使用Ctrl + R(重新打开终端后)。