我刚开始使用 zsh,正在配置一些东西。我选择了 vi 绑定,因为我对它们更熟悉。和许多在我之前的人一样,我很快发现在开始输入之前对我所处的 vi 模式有一些视觉线索会很有用。
环顾四周,我发现有些地方会在提示中插入一些文本。我尝试调整其中一个,使提示使用不同的颜色,而不是添加文本。以下是相关代码:
setopt PROMPT_SUBST
VIMODE="$fg[red]"
function zle-line-init zle-keymap-select {
VIMODE="${${KEYMAP/vicmd/$fg[green]}/(main|viins)/$fg[red]}"
zle reset-prompt
}
zle -N zle-line-init zle-keymap-select
PROMPT='%{${VIMODE}%}%#%{$reset_color%} '
这将在 ${VIMODE} 变量中获取颜色指令,如果在插入时则为红色,如果在 cmd 时则为绿色。到目前为止,它有效,并且正确更新了我使用的所有模式更改的颜色(大写 C 或 A、i、a)。
但是运行命令后,提示符变为白色,直到我开始输入内容(然后它变为红色)。通过 ^L 清除屏幕使其正确重绘。
有人能检查一下并告诉我哪里做错了吗?我很确定还有一种比通过变量传递颜色更好的有条件改变颜色的方法。
提前致谢!
编辑:
嗯,发生了一些非常奇怪的事情,我不明白。我不得不重新启动计算机,当我打开终端时,提示符停止在模式更改之间切换颜色。
我拿出了初始化线路小部件和来源'd .zshrc 并且神奇的是,它不仅再次工作,而且原来的问题(命令后的白色提示)也消失了。
这就是目前的状况,我不确定这是否会再次发生。
VIMODE="$fg[red]"
function zle-keymap-select {
VIMODE="${${KEYMAP/vicmd/$fg[green]}/(main|viins)/$fg[red]}"
zle reset-prompt
}
zle -N zle-keymap-select
有人知道这可能与哪些因素有关吗?
我最初没有重启终端,只是加载了 .zshrc 来加载所有内容。这样做会不会有副作用?
谢谢。
答案1
zle -N zle-line-init zle-keymap-select
创建一个名为 的小部件zle-line-init
,由函数 实现zle-keymap-select
。
因此,最初,zle-keymap-select
每次启动行编辑器读取新行输入时都会执行您的函数,但是当您更改键盘映射时永远不会调用您的函数。
另外,source ~/.zshrc
是馊主意这可能会导致各种奇怪的问题。相反,只需重新启动终端或执行操作即可exec zsh
使文件中的更改.zshrc
生效。