我刚刚安装了zsh和我的-zsh(我以前的shell是bash)。我的.zshrc完全不受oh默认设置的修改。"git“插件是唯一启用的插件(默认情况下是启用的)。
我使用这一技术创建了一个非常简单的主题:
setopt PROMPT_SUBST
PROMPT='[%D{%L:%M:%S}] '
TMOUT=1
TRAPALRM() {
zle reset-prompt
}启用此主题后,我发现上下箭头键无法正确回忆我的历史记录:
如果我只使用上面脚本的内容替换了我的.zshrc (实际上使用了来自主题的提示设置,但禁用了噢- my ),那么我的向上和向下箭头就会像预期的那样工作。
如果我回到我的oh .zshrc,并在我的主题中注释掉zle reset-prompt行,我的历史就会很好(但是时钟已经不存在了)。
如何才能同时使用oh和zle reset-prompt而不导致上下箭头的行为不同呢?这是oh中的一个bug,还是配置错误?
发布于 2019-02-12 09:04:40
您可以使用此函数代替。
TRAPALRM() {
case "$WIDGET" in
expand-or-complete|self-insert|up-line-or-beginning-search|down-line-or-beginning-search|backward-delete-char|.history-incremental-search-backward|.history-incremental-search-forward)
:
;;
*)
zle reset-prompt
;;
esac
}基本上,这只在zle reset-prompt不在的情况下才运行WIDGET。您可以添加用于忽略reset-prompt的小部件列表,方法是与|分离。
问题是,TMOUT实际上指定了shell的超时。在外壳超时之后,它将触发SIGALRM信号并退出外壳。TRAPALRM()函数将捕获SIGALRM信号并拦截退出,同时执行定义的函数。
向上/向下箭头的行为并没有不同,而是在提示符重置时触发,因此行为怪异。当您键入或滚动历史记录时,上面的函数将不会运行zle reset-prompt,并消除滞后。唯一的缺点是,在输入之后,提示符将无法更新,直到您做了一些小部件之外的事情(比如按ENTER,它触发了accept-line小部件)。
https://unix.stackexchange.com/questions/347182
复制相似问题