如何在 zsh 提示符下输入已输入的文本来搜索历史记录?

如何在 zsh 提示符下输入已输入的文本来搜索历史记录?

在 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对历史记录执行反向搜索,一旦您开始输入,匹配的命令就会显示为建议。

相关内容