我希望能够在 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 具有语法彩色输出– 您会看到您的历史记录被彩色化了。