在 zsh 中,我知道我可以使用Ctrl+搜索历史记录r。然而,我常常开始在提示符处直接键入命令,但随后意识到我应该搜索历史记录。当我点击Ctrl+时r,它会弹出一个空白的历史搜索提示,如下所示:
请注意我的提示符处有文本,但历史搜索提示符处没有文本。如何使用提示中已有的文本开始历史搜索,如下所示:
答案1
您可以使用兹勒的history-search
功能:
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
这将根据提示符下已输入的内容绑定Up并(根据您自己的转义序列进行调整)向后和向前历史搜索。Down
因此,如果您输入“vim”并点击Up,zsh 将向后遍历您的历史记录,仅查找以“vim”开头的命令。
一旦您从 zsh 的历史记录中选择了所需的命令,您还可以使用历史搜索结束函数(通常位于/usr/share/zsh/functions/Zle/
)并附加到-end
每行的末尾,如下所示:
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end
答案2
另一个有用的选项是history | grep
分配一个别名,例如
alias hg='history | grep'
然后您可以输入hg whatever
搜索您使用过的命令,例如
$ hg chmod
1309 chmod +x rotate_files.sh
1385 chmod +x rotate_files_270.sh
1512 chmod +x testy.sh
1528 chmod +x act_on_2_numbers.sh
2142 chmod +x ~/bin/display_tmux_pane_pwd.sh
4532 chmod +x cat_files.rb
我将此别名放入我的点文件中。
答案3
如果您正在使用哦我的zsh,添加history-substring-search
到该plugins=(...)
行。
然后加
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
位于 . 行下方的某处source $ZSH/oh-my-zsh.sh
。保存并启动新终端或source ~/.zshrc
在当前终端中运行。
笔记: ^[[A
是我使用的终端(kitty)和许多其他终端中向上箭头的转义序列。要检查您选择的终端,请输入showkey -a
然后按您想要查找转义序列的键。
答案4
第三方解决方案
1 - 使用怎么样zsh-autosuggestions
?
问题是,对于您输入的每个命令,该插件都会向您显示一些可以接受或不接受的建议。尝试一下并给我们一些反馈。
2 - 的弗兹夫安装并正确配置后,添加一个可以更改反向搜索历史记录的小部件(默认绑定到 fzf-history-widget Ctrlr),它会在您的命令历史记录中添加一些模糊搜索。我正在使用它,并与自我暗示相结合,效果非常好。
原生解决方案
在没有插件的情况下,我们可以按Ctrlr对历史记录执行反向搜索,一旦您开始输入,匹配的命令就会显示为建议。