【问题标题】:zsh: refresh prompt after running zle widgetzsh:运行 zle 小部件后刷新提示
【发布时间】:2018-09-14 05:45:15
【问题描述】:

我定义了以下小部件

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 ./

/$ |

这意味着cwdll 运行时已经是/

这是非常混乱的,可能会导致严重的错误。 (例如,如果按^R 后我被打断离开我的办公桌然后回来,我可能会忘记我做了什么)

如何让终端在按键后重绘提示?是否有 zle 函数来执行此操作?

【问题讨论】:

  • 有一个小部件 (clear-screen) 可以清除屏幕并重绘提示,但我没有看到只重绘提示的方法。

标签: zsh zsh-zle


【解决方案1】:

reset-prompt可以解救:

function cdd()
{
    cd /
    zle reset-prompt # XXX: added
}

reset-prompt

强制重新展开屏幕左右两侧的提示,然后重新显示编辑缓冲区。这既反映了提示变量本身的变化,也反映了值扩展的变化(例如,时间或目录的变化,或提示所引用的变量值的变化)。

否则,提示只会在每次 zle 启动时展开,并且当显示被来自 shell 的另一部分的输出(例如作业通知)中断时,会导致重新打印命令行。

--- zshzle(1), reset-prompt, Miscellaneous, Widgets, zsh command line editor

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2013-01-16
    相关资源
    最近更新 更多