rps*_*rps 30 command-history zsh line-editor
目前,我的 .zshrc 中有以下内容:
bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search
Run Code Online (Sandbox Code Playgroud)
但是,这似乎只在出现空格字符之前与我当前输入的内容相匹配。例如,sudo ls /将匹配我历史记录中以 开头的每一行sudo,而我希望它只匹配与我的整个输入匹配的行。(即sudo ls /etc会匹配,但不会sudo cat /var/log/messages)
为了获得所需的行为,我需要改变什么?
这是我的整个 .zshrc 以防万一它是相关的:https : //gist.github.com/919566
小智 46
zsh 通过使用提供此功能
history-beginning-search-backward
history-beginning-search-forward
Run Code Online (Sandbox Code Playgroud)
前任。
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
Run Code Online (Sandbox Code Playgroud)
通过
ctrl+查找确切的密钥代码vKEY
前任。
ctrl+ vUP
ctrl+ vDOWN
ctrl+ vPageUp
ctrl+vPageDown
等
如果您使用的是 mac,以下内容适用于 OSX catalina。
bindkey "\e[5~" history-search-backward
bindkey "\e[6~" history-search-forward
Run Code Online (Sandbox Code Playgroud)
joe*_*dle 14
这篇2013 年的博客文章推荐了几个匹配光标前所有单词的键绑定。
# Cycle through history based on characters already typed on the line
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "$key[Up]" up-line-or-beginning-search
bindkey "$key[Down]" down-line-or-beginning-search
Run Code Online (Sandbox Code Playgroud)
如果$key[Up]并$key[Down]没有你的机器上工作,你可以尝试$terminfo[kcuu1]和$terminfo[kcud1]替代。
Gil*_*il' 11
这是记录在案的行为:
down-line-or-search
在缓冲区中向下移动一行,或者如果已经在底行,则在历史记录中向前搜索以缓冲区中的第一个单词开头的行。
似乎没有一个现有的小部件可以完全满足您的需求,因此您必须自己制作。以下是如何定义行为类似于 的小部件up-line-or-search,但使用行的开头(直到光标)而不是第一个单词作为搜索字符串。没有真正测试过,尤其是在多行输入上。
up-line-or-search-prefix () {
local CURSOR_before_search=$CURSOR
zle up-line-or-search "$LBUFFER"
CURSOR=$CURSOR_before_search
}
zle -N up-line-or-search-prefix
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用history-beginning-search-backward,但仅当光标位于第一行时才调用它。未经测试。
up-line-or-history-beginning-search () {
if [[ -n $PREBUFFER ]]; then
zle up-line-or-history
else
zle history-beginning-search-backward
fi
}
zle -N up-line-or-history-beginning-search
Run Code Online (Sandbox Code Playgroud)