代码之家  ›  专栏  ›  技术社区  ›  doraemon

zsh:运行zle小部件后刷新提示

  •  2
  • doraemon  · 技术社区  · 7 年前

    我定义了以下小部件

    function cdd()
    {
        cd /
    }
    zle -N cdd{,}
    bindkey "^R" cdd
    

    ~/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 函数来执行此操作?

    1 回复  |  直到 7 年前
        1
  •  6
  •   hchbaw    7 年前

    reset-prompt 可以营救:

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

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

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

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