Answers:
您可以使用zle的history-search
功能:
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
根据提示中已经输入的内容,此操作将绑定历史记录Up并Down(根据您自己的转义序列进行调整)后退和前进。
因此,如果您输入“ vim”并单击Up,则zsh将仅对那些以“ vim”开始的命令向后遍历您的历史记录。
通过使用history-search-end函数(通常位于中/usr/share/zsh/functions/Zle/
)从zsh的历史记录中选择所需的命令并将其追加-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
另一个有用的选择是 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
我将此别名放在我的点文件中。
如果您使用的是oh-my-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
,然后按您要查找其转义序列的键。
brew install zsh-history-substring-search
,请查看回购自述文件中的说明,然后继续创建答案,我对结果感到非常满意。
您可能想在https://github.com/zsh-users/zsh-history-substring-search使用脚本
您可以在其中输入任何先前输入的命令的任何部分,然后按Up和Down键来循环显示匹配的命令。
我强烈建议使用"$terminfo[kcuu1]"
或"$key[Up]"
而不是硬编码的东西一样"^[[A"
可能会或可能不会任何特定的系统上运行。
查看/etc/zsh/zshrc
更多密钥。这是我的系统上的样子。我认为terminfo
密钥更有可能被定义。
key=(
BackSpace "${terminfo[kbs]}"
Home "${terminfo[khome]}"
End "${terminfo[kend]}"
Insert "${terminfo[kich1]}"
Delete "${terminfo[kdch1]}"
Up "${terminfo[kcuu1]}"
Down "${terminfo[kcud1]}"
Left "${terminfo[kcub1]}"
Right "${terminfo[kcuf1]}"
PageUp "${terminfo[kpp]}"
PageDown "${terminfo[knp]}"
)
那使用zsh-autosuggestions
呢?
问题是,对于您键入的每个命令,此插件都会向您显示一些可以接受或不接受的建议。试试看,给我们一些反馈。
没有插件,我们可以按Ctrlr一下历史记录上的反向搜索,一旦您开始键入匹配的命令就会显示为建议。
我使用vi-mode插件。然后在〜/ .zshrc中,我具有以下绑定:
bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward
这样一来^P
,^N
如果我没有输入任何文本,则可以使用和作为正常向后和向前搜索,如果输入则可以作为过滤搜索。
因为我使用oh-my-zsh,并且使用joelostblom James的子字符串解决方案,所以我像这样修改.zshrc :(在第13行中,找到“ source $ ZSH / oh-my-zsh.sh”行。 ,然后修改周围的代码。)
plugins=(
git
history-substring-search
)
source $ZSH/oh-my-zsh.sh
bindkey -v
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
bindkey -v
会破坏ctrl-a,ctrl-e。最有可能是所有ctrl命令。
这对我有用(在macOS上),可以通过向上/向下箭头轻松访问子字符串历史记录。密钥绑定取决于您。
子字符串搜索历史比仅访问以字符串开头的命令更好。在大多数情况下,这更像ctrl -r,即那些没有glob或正则表达式匹配的情况。
从zsh-users / zsh-history-substring-search的说明开始
brew install zsh-history-substring-search
# add the following to .zshrc
source /usr/local/share/zsh-history-substring-search/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
现在充分享受这一点。