我定义了以下小部件
function cdd()
{
cd /
}
zle -N cdd{,}
bindkey "^R" cdd按下组合键后,cwd已经更改,但终端提示没有更新。示例,在执行以下操作后()
~/tmp/todelete$ | # press key ^R here; "~$" is the prompt; "|" denotes cursor终端机保持不变。如果我然后键入ls -ld .,它将显示
~/tmp/todelete$ ls -ld .
dr-xr-xr-x 23 root root 4096 Sep 14 07:52 ./
/$ |这意味着在运行cwd时,ll已经是/了。
这是非常混乱的,可能导致严重的错误。(例如,在按^R之后,我被打断离开我的办公桌,然后回来,我可能会忘记我做了什么。)
如何让终端在按下键后重画提示符?有一个zle函数来完成这个任务吗?
发布于 2018-09-16 13:39:53
reset-prompt可以拯救:
function cdd()
{
cd /
zle reset-prompt # XXX: added
}
reset-prompt强制屏幕左右侧的提示重新展开,然后重新显示编辑缓冲区。这既反映了提示符变量本身的更改,也反映了值扩展中的更改(例如,时间或目录的更改,或提示符所指变量值的更改)。 否则,只有在每次zle启动时,以及当显示被shell的另一部分的输出(例如作业通知)中断时,才会展开提示符,这会导致命令行被重印。- zshzle(1),重置提示,杂项,小部件,zsh命令行编辑器
https://stackoverflow.com/questions/52325626
复制相似问题