是否有可能...
加强本地ZSH Shell历史记录(操作仅在该提示中发生)
加强全局ZSH历史记录(共享历史记录处于启用状态)-默认情况下,共享历史记录处于打开状态时按向上箭头会发生什么
...分开。
例如,可以为全局历史记录绑定CTRL + up,对于本地历史记录则绑定正常。同时,将全局历史用于向后历史搜索(即CTRL+ R)是有意义的。
这可能会加快某些Shell操作的速度,因为某些操作特定于该Shell窗口,而您想返回到它们。
是否有可能...
加强本地ZSH Shell历史记录(操作仅在该提示中发生)
加强全局ZSH历史记录(共享历史记录处于启用状态)-默认情况下,共享历史记录处于打开状态时按向上箭头会发生什么
...分开。
例如,可以为全局历史记录绑定CTRL + up,对于本地历史记录则绑定正常。同时,将全局历史用于向后历史搜索(即CTRL+ R)是有意义的。
这可能会加快某些Shell操作的速度,因为某些操作特定于该Shell窗口,而您想返回到它们。
Answers:
复制并粘贴到您的.zshrc
:
游标正在使用本地历史记录:
bindkey "${key[Up]}" up-line-or-local-history
bindkey "${key[Down]}" down-line-or-local-history
up-line-or-local-history() {
zle set-local-history 1
zle up-line-or-history
zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
zle set-local-history 1
zle down-line-or-history
zle set-local-history 0
}
zle -N down-line-or-local-history
如果您还需要按键绑定(CTRL+光标)来逐步浏览全局历史记录,也可以将其添加到您的.zshrc
:
bindkey "^[[1;5A" up-line-or-history # [CTRL] + Cursor up
bindkey "^[[1;5B" down-line-or-history # [CTRL] + Cursor down
要使此工作有效,需要启用选项SHARE_HISTORY(请参见16.2.4历史记录)。运行setopt
并检查是否列出了“ sharehistory”。如果没有添加setopt sharehistory
到您的.zshrc
。然后可以像上面一样使用set-local-history。文档说明:
默认情况下,历史记录移动命令会访问导入的行以及本地行,但是您可以使用set-local-history zle绑定启用和禁用此功能。也可以创建一个zle窗口小部件,该窗口小部件将使某些命令忽略导入的命令,而某些命令将其包括在内。
请注意,默认情况下使用全局历史记录(所有功能均以“ zle set-local-history 0”结尾,即禁用了本地历史记录)。因此,默认情况下按CTRL+ R将搜索全局历史记录(在大多数情况下有意义)。
这与@mpy的解决方案非常相似,但可以进行复制和粘贴。它将向上和向下覆盖光标键。我使用了此邮件列表条目。
也可以看看:
${key[Up]}
。然后(在编辑模式下)键入Ctrl + V,然后按向上箭头。这应该插入正确的密钥代码。对向下箭头执行相同的操作。
Ctrl+R
。
您可以设置一个特殊的zle小部件以仅显示本地历史记录项:
function only-local-history () {
zle set-local-history 1
zle up-history
zle set-local-history 0
}
zle -N only-local-history
假设↑已绑定up-line-or-history
(我认为是默认设置),则可以将此小部件绑定到另一个按键,例如CTRL+ ↑:
bindkey "^[Oa" only-local-history
是否可行,可能取决于您的终端。上面的线在URxvt/Screen
。有xterm
你需要
bindkey "^[[1;5A" only-local-history
为CTRL+ ↑。
另一个变体可能是
function peek-history () {
zle set-local-history
zle up-history
zle set-local-history
}
zle -N peek-history
因此,如果启用了本地历史记录,则可以浏览全局历史记录,反之亦然。
@lumbic的答案仅对我作了一些改动:
setopt share_history
up-line-or-local-history() {
zle set-local-history 1
zle up-line-or-history
zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
zle set-local-history 1
zle down-line-or-history
zle set-local-history 0
}
zle -N down-line-or-local-history
bindkey '^[OA' up-line-or-history # Cursor up
bindkey '^[OB' down-line-or-history # Cursor down
bindkey '^[[1;5A' up-line-or-local-history # [CTRL] + Cursor up
bindkey '^[[1;5B' down-line-or-local-history # [CTRL] + Cursor down
此代码将全局历史记录设为默认历史记录,并对本地历史记录使用CTRL-箭头。
注意:我将zsh 5.0.2与oh-my-zsh一起使用。
Ctrl+arrows
对于本地历史记录,这似乎与OP要求的相反。
我一直在尝试其他答案在此处列出的选项,但我对它们不满意。小部件1 up-history
或up-line-or-history
不包括开始搜索,并且在使用小部件1 up-line-or-beginning-search
更改本地历史记录首选项时,小部件1似乎无法正常工作。2
所以我来到了以下设置。它使Ctrl+箭头可以浏览全局历史记录,Alt+箭头可以仅浏览本地历史记录(类似于Bash),而独立箭头则可以使用智能开始搜索(默认为Oh My Zsh)。
up-line-or-local-history() {
zle set-local-history 1
zle up-line-or-search
zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
zle set-local-history 1
zle down-line-or-search
zle set-local-history 0
}
zle -N down-line-or-local-history
bindkey "${key[Up]}" up-line-or-beginning-search
bindkey "${key[Down]}" down-line-or-beginning-search
bindkey "^[[1;5A" up-line-or-search # [CTRL] + Cursor up
bindkey "^[[1;5B" down-line-or-search # [CTRL] + Cursor down
bindkey "^[[1;3A" up-line-or-local-history # [ALT] + Cursor up
bindkey "^[[1;3B" down-line-or-local-history # [ALT] + Cursor up
1他们的down
对等物也含蓄。
2更改本地历史记录首选项后,将重新定义用于搜索的开始,因此,将使用第一个找到的整个命令作为第二个搜索中要搜索的开始。
根据这里的各种答案,我能够制作一个精简版本:
function up-line-or-history() {
zle set-local-history 1
zle .up-line-or-history
zle set-local-history 0
}
function down-line-or-history() {
zle set-local-history 1
zle .down-line-or-history
zle set-local-history 0
}
# Overwrite existing {up,down}-line-or-history widgets with the functions above.
zle -N up-line-or-history
zle -N down-line-or-history
此版本将使用新的用户定义的小部件覆盖现有up-line-or-history
和down-line-or-history
小部件。此小部件启用了本地历史记录,然后将调用原始小部件,这些小部件在.
-prefixed名称下可用。有关详细信息,请参见zle小部件文档。
这意味着您将保留所有现有的键绑定。因此,您可以避免弄清楚在当前终端中键入向上箭头时的转义序列。
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 "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down
以上答案对我有用。
参考:https : //coderwall.com/p/jpj_6q/zsh-better-history-searching-with-arrow-keys