PS1 zsh 中的配置导致在每次提示重绘后删除前一行
PS1 config in zsh causes previous line to be removed after each prompt redraw
我的 .zsh
配置有以下几行:
function zle-line-init zle-keymap-select {
VIM_PROMPT="${${KEYMAP/vicmd/ [NORMAL]}/(main|viins)/}"
PS1=$'\e[0;36m%n\e[m at \e[0;33m%m\e[m in \e[0;32m%~\e[m\e[0;34m$(vcs_info_wrapper)\e[m\e[1;33m$VIM_PROMPT\e[m\n$ '
zle reset-prompt
}
发生的情况是,如果终端 window 太窄,每次重绘提示时,前一行都会被删除。例如,假设我有以下提示:
first line
some text here
another text here
sergiyb at wing in ~ [master *]
$
然后我按Escape然后得到
first line
some text here
sergiyb at wing in ~ [master *] [NORMAL]
$
现在如果我按 i,然后我得到这个
first line
sergiyb at wing in ~ [master *]
$
同样,如果我输入命令 ls
,它会列出所有文件,但会删除最后一行:
sergiyb at wing in ~ [master *]
$ ls test_dir_with_files_1_to_10
file1 file2 file4 file6 file8
然而,如果终端 window 足够宽,则不会发生这种情况,例如
sergiyb at wing in ~ [master *]
$ ls test_dir_with_files_1_to_10
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
此外,如果我尝试缩短 PS1 行,例如通过删除用户名,它会停止发生,直到我进一步减小终端的宽度。
知道是什么原因造成的and/or如何解决?
zsh
无法准确确定提示的大小,因为它不知道终端不会将 ANSI 转义码显示为可打印字符。请改用 zsh
自己的格式转义符。
PS1=$'%F{cyan}%n%f at %F{yellow}%m%f in %F{green}%~%F{blue}$(vcs_info_wrapper)%B%F{yellow}$VIM_PROMPT%f%b\n$ '
我的 .zsh
配置有以下几行:
function zle-line-init zle-keymap-select {
VIM_PROMPT="${${KEYMAP/vicmd/ [NORMAL]}/(main|viins)/}"
PS1=$'\e[0;36m%n\e[m at \e[0;33m%m\e[m in \e[0;32m%~\e[m\e[0;34m$(vcs_info_wrapper)\e[m\e[1;33m$VIM_PROMPT\e[m\n$ '
zle reset-prompt
}
发生的情况是,如果终端 window 太窄,每次重绘提示时,前一行都会被删除。例如,假设我有以下提示:
first line
some text here
another text here
sergiyb at wing in ~ [master *]
$
然后我按Escape然后得到
first line
some text here
sergiyb at wing in ~ [master *] [NORMAL]
$
现在如果我按 i,然后我得到这个
first line
sergiyb at wing in ~ [master *]
$
同样,如果我输入命令 ls
,它会列出所有文件,但会删除最后一行:
sergiyb at wing in ~ [master *]
$ ls test_dir_with_files_1_to_10
file1 file2 file4 file6 file8
然而,如果终端 window 足够宽,则不会发生这种情况,例如
sergiyb at wing in ~ [master *]
$ ls test_dir_with_files_1_to_10
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
此外,如果我尝试缩短 PS1 行,例如通过删除用户名,它会停止发生,直到我进一步减小终端的宽度。
知道是什么原因造成的and/or如何解决?
zsh
无法准确确定提示的大小,因为它不知道终端不会将 ANSI 转义码显示为可打印字符。请改用 zsh
自己的格式转义符。
PS1=$'%F{cyan}%n%f at %F{yellow}%m%f in %F{green}%~%F{blue}$(vcs_info_wrapper)%B%F{yellow}$VIM_PROMPT%f%b\n$ '