我最近在 Fedora 38 中从 bash 切换到 zsh。
我已经安装了 oh my zsh 并拥有以下插件。
plugins=(git fzf tig zsh-autosuggestions)
我的终端表现得很奇怪。如果我up
按下键盘,它的一部分就会消失,并且当我用鼠标中键粘贴内容时,它会出现奇怪的故障。
此外,当使用退格键删除命令时,它的一部分将保留在终端上,但不会影响我输入的新命令。(参见图 2 我无法删除该命令,oc lo
但它的作用就好像我在提示符的开头一样所以ls --help
运行成功)
我下面有一些屏幕截图,显示了一些奇怪的故障。
就上下文而言,我使用术语作为我的主终端,但我在使用 Konsole 时也遇到了这些问题。
这是 oh my zsh 常见的问题吗?
我的主要提示定义为:
$ typeset PROMPT
PROMPT='[%n]$fg[blue][%m]%{$fg[white]%}$(git_custom_status)[%~% ]%{$reset_color%}%B$%b '
答案1
在你的:
PROMPT='[%n]$fg[blue][%m]%{$fg[white]%}$(git_custom_status)[%~% ]%{$reset_color%}%B$%b '
虽然$fg[white]
和$reset_color
大概是告诉终端将前景色更改为白色并重置由colors
可自动加载函数定义的颜色的转义序列%{...%}
,以告诉 zsh 的行编辑器这些字符显示的宽度为零,但事实并非如此的$fg[blue]
。
$ autoload colors
$ colors
$ echo $#fg[blue]
5
这是一个 5 个字符的长序列,但当发送到终端时,它仅更改前景色,并且不会将光标向右移动五列,但由于您没有告诉它,行编辑器会误解例如,当您尝试移动光标时,光标应该在哪里显示。
在这里,虽然你可以使用%{...%}
围绕这$fg[blue]
一点,在快速扩展中你也不需要它。迅速扩张有更改前景色和背景色的特殊指令: %F{colour}
and %K{colour}
(and%f
和%k
重置为默认值),所以它应该是:
PROMPT='[%n]%F{blue}[%m]%F{white}$(git_custom_status)[%~]%f%B$%b '
这还假设该promptsubst
选项已启用并且该git_custom_status
命令输出的内容是有效的提示字符串。