![有没有办法用多个搜索词来反向搜索 zsh 历史记录?](https://linux22.com/image/1341467/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E7%94%A8%E5%A4%9A%E4%B8%AA%E6%90%9C%E7%B4%A2%E8%AF%8D%E6%9D%A5%E5%8F%8D%E5%90%91%E6%90%9C%E7%B4%A2%20zsh%20%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%EF%BC%9F.png)
我希望能够在 zsh 上进行反向搜索(CTRL+R),但使用多个搜索词来搜索命令。
例如,我想搜索包含“scp”和“hello”的命令。
我怀疑如果不直接在 中搜索就不可能实现.histfile
。
答案1
我不确定是否可以做到确切地您正在想什么,但您可以非常接近(至少足够接近以完成工作)。
首先,你的 .zshrc 中可能有类似以下内容:
bindkey '^r' history-incremental-search-backward
向前搜索也有类似的方法。您需要相应地更改这些:
bindkey '^R' history-incremental-pattern-search-backward
现在,您可以在历史搜索中使用模式。在这种情况下,键入 control-r(用于向后搜索),然后键入以下内容(搜索完模式后再次按 control-r):
对于字符串中任意位置的“scp”或“hello”:
?(scp|hello)
以“scp”开头,后跟字符串中任意位置的“hello”:
scp*?(hello)
并非每个可用于通配符的模式都有效(出于某种原因,如果您尝试使用两个表达式进行严格的“AND”搜索,其中任何一个都可能先出现,它就会不起作用),但这应该足够接近以完成您想要的操作。
顺便说一句,这是个好问题。
答案2
您可以使用两个项目/插件:
- https://github.com/psprint/history-search-multi-word
- https://github.com/psprint/zsh-navigation-tools
它们都允许通过 Zshell 的历史记录进行多词增量搜索。Zsh 导航工具还允许近似匹配并具有其他功能。HSMW 具有语法彩色输出– 您会看到您的历史记录被彩色化了。