我的.zshrc中有以下代码:
TMOUT=1
TRAPALRM() { zle reset-prompt }
触发菜单完成后,菜单中的所有项目除了突出显示的项目都会在TRAPALRM
触发后消失,并且我会在短时间内继续在菜单zsh segvaults中导航
是否有任何修复或解决方法?
编辑:Linux Mint 17上的zsh版本是5.0.2
编辑:我在Gentoo上的zsh版本5.0.7上观察到同样的事情
答案 0 :(得分:12)
我发现这个解决方法,基本上阻止在菜单选择中调用“reset-prompt”:
TRAPALRM() {
if [ "$WIDGET" != "complete-word" ]; then
zle reset-prompt
fi
}
请注意,complete-word
可能与您有所不同;我在echo $WIDGET
电话中找到了TRAPALRM
。
答案 1 :(得分:0)
我对此问题的解决方案是检查$ WIDGET和$ _lastcomp [insert]值,以便更精确地了解菜单选择是否处于活动状态。
autoload -U is-at-least
TMOUT=1
if is-at-least 5.1; then
# avoid menuselect to be cleared by reset-prompt
redraw_tmout() {
[ "$WIDGET" = "expand-or-complete" ] && [[ "$_lastcomp[insert]" =~ "^automenu$|^menu:" ]] || zle reset-prompt
}
else
# evaluating $WIDGET in TMOUT may crash :(
redraw_tmout() { zle reset-prompt }
fi
TRAPALRM() { redraw_tmout }
"扩展或完成"可能是"完整的词"或者某种东西,基于对Tab键的键绑定。可以通过bindkey "^I"
命令检查它。