ZSH PS1 在 tab 时添加间距

And*_*ite 5 zsh shell command-line autocomplete oh-my-zsh

我的自定义 PS1 提示(我从 bash 带来的)遇到了 zsh/oh-my-zsh 问题。

当我使用内置的 zsh/oh-my-zsh 提示和选项卡进行自动完成时,这会按预期工作。

当我使用自己的 PS1 提示时,整个输入区域会移动大约 8 个空格并停留在那里,直到我发送一个换行符/换行符。

例子:

我输入了vim a并进行了选项卡式

内置主题,robbyrussell带有默认提示:

内置主题,*robbyrussell* 带有默认提示:

相同主题,自定义 PS1 提示:

相同主题,自定义 PS1 提示:

.zshrc 中的 PS1 字符串和变量定义:

# Monokai colours
D=$'\e[37;40m'
PINK=$'\e[35;40m'
GREEN=$'\e[32;40m'
ORANGE=$'\e[33;40m'    

export PS1='${PINK}andrew${D}@${ORANGE}macbook${D}:%~$ '
Run Code Online (Sandbox Code Playgroud)

作为测试,我尝试了没有颜色变量的提示,它确实有效

Ada*_*hon 5

似乎 ANSI 代码弄乱了您的终端,可能是由于与其他内容的某些交互PS1或因为您没有重置为默认值。

幸运的是,zsh不需要使用 ANSI 转义码。您可以使用%F{color}%K{color}分别设置前景色和背景色%f%k重置默认值(有关更多信息,请参阅Zsh 手册

其中任何一个都应该可以解决问题:

PS1='%5Fandrew%f@%3Fmacbook%f:%~$ '
PS1='%F{5}andrew%f@%F{3}macbook%f:%~$ '
PS1='%F{magenta}andrew%f@%F{yellow}macbook%f:%~$ '
Run Code Online (Sandbox Code Playgroud)

我使用%f代替%7For %F{white},假设您真的只想在那个地方禁用着色(因此命名变量D而不是WHITE)。如果你想%F{white}改用,你应该%fPS1.

如果您使用 88 色或 256 色终端,您甚至可以使用这些颜色的索引。例如%F{221}会给你一个深黄色。


另外请注意,这通常不需要到export PS1zsh-或bash为这一问题。