zsh - zsh:运行 zle 小部件后的刷新提示
问题描述
我定义了以下小部件
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
功能吗?
解决方案
reset-prompt
可以拯救:
function cdd()
{
cd /
zle reset-prompt # XXX: added
}
reset-prompt
强制重新展开屏幕左右两侧的提示,然后重新显示编辑缓冲区。这既反映了提示变量本身的变化,也反映了值扩展的变化(例如,时间或目录的变化,或提示所引用的变量值的变化)。
否则,提示只会在每次 zle 启动时展开,并且当显示被来自 shell 的另一部分的输出(例如作业通知)中断时,会导致重新打印命令行。
推荐阅读
- c# - Visual Studio,将 Gridview 列转换为行
- reactjs - 组件不能用作 JSX 组件。它的返回类型 'Element[]' 不是有效的 JSX 元素
- node.js - 带有 react/axios、nodejs/express 的动态路由
- angular - 如何在列表角度9中显示组件定义器
- python - 使用 sys.argv 为脚本的 .csv 输出声明文件名?
- python - 将 pySpark 数据框列数据获取到列表变量中的问题
- python - Django Rest Framework - URL 查询不起作用?
- haskell - 如何获取 Haskell 源文件中定义的函数列表(用于语义分析)?
- amazon-web-services - 使用 cloudformation 附加 IAM 角色
- python - 如何更改特定索引处按钮的位置