我很高兴并且非常喜欢 bash shell 的Ctrl向后R搜索功能。我的一些同事不喜欢它,因为它有时会令人困惑。我理解他们。如果您输入了错误的字符,则历史中的当前位置是过去的某个位置,您将找不到最近的匹配项。
在 shell 历史中向后搜索是否有更用户友好的替代方法?
我想坚持使用 bash。建议替代外壳不是这个问题的答案。
这里解释了“丢失位置”的问题:Reset bash history search position。这些解决方案有效。这是正确的。但是根据我的观点,那里的解决方案并不容易且用户友好。这些解决方案并不简单直接。这些都是过去的解决方案。在过去,人类需要学习计算机想要输入的方式。但是今天,这些工具应该以一种对用户来说很容易的方式接受输入。
也许有人知道像 PyCharm 这样的 jetbrains IDE。如果您搜索“foobar”,您甚至会得到包含“foo_bar”的行。太好了,这就是 unix :-)
我正在使用模糊查找程序FZF。我编写了自己的键绑定和 shell 脚本,以利用FZF作为我选择的工具来反向搜索交互式Bash shell 的历史。随意从我的Config GitHub 存储库中复制和粘贴代码。
~/.bashrc 配置文件
~/.inputrc.fzf 配置文件##
fzf-history 可执行 Bash 脚本
key-bindings.bash 源 Bash 脚本
取自FZF 的 Bash 键绑定文件并稍作改编,这里是用于 Bash 历史反向搜索的 Emacs 模式兼容键绑定Ctrl-R(未经测试):
grep blablabla ~/.bash_history
:您必须设置 bash 以在每个命令后将历史记录保存到文件中。从我的
~/.bashrc
你可能想了解命令的作用和调整。对于它的价值,如果您禁用 tty 的停止/启动功能(您可能不会使用那么多),您可以通过按 Control-S 来更改搜索方向。
至于那些不是“用户友好”或不直观的键绑定,它们是 emacs 键绑定。
emacs
并不适合所有人,这并不奇怪(尽管我知道秘书和其他不那么自命不凡的人能够立即掌握它们并且没有大惊小怪)。这更像是一种文化。McFly是另一种选择。它非常易于安装 - 您可以通过
brew
或下载最新的二进制文件来完成。它是用 Rust 编写的,所以它们是静态链接的。没有依赖废话。然后只需将其添加到您的
.bashrc
/.zshrc
:它为您提供以某种智能方式排序的全屏 UI。
FZF支持 bash(还有 zsh 和 fish)。
@Tim Freske 的回答描述了他们对 vi 样式键绑定的修改。
默认键绑定是 emacs 样式。这甚至会覆盖Ctrl-r行为以模糊查找而不会丢失位置。默认情况下它们可能未启用。要启用它们,请将其添加到
.bashrc
:(如果这不起作用,执行
apt-cache show fzf
并查找...fzf/README...
文件,它会列出 bash、zsh、fish 和 vim 的命令)