自定义Oh My Zsh主题:长提示消失/被截断

9

我尝试制作自己的Oh My Zsh主题,但是当我在提示符中输入长行(任何长度超过下面所见的行),该行会消失。然而,如果我调整窗口大小,该行就会重新出现。

是我的主题中有什么原因导致这种情况发生吗?

如果我多输入一个字符然后再删除一个字符,光标将出现在窗口边缘。

你可以在此处查看主题的代码。这里是我认为我们关注的部分:

# Build the prompt
PROMPT='
' # Newline
PROMPT+='${style_user}%n' # Username
PROMPT+='${style_chars}@' # @
PROMPT+='${style_host}%m' # Host
PROMPT+='${style_chars}: ' # :
PROMPT+='${style_path}%c ' # Working directory
PROMPT+='$(git_custom_status)' # Git details
PROMPT+='
' # Newline
PROMPT+='${style_chars}\$${RESET} '
1个回答

16

顺便提一下,你的链接已经失效了,这凸显了发布代码链接而不是代码本身的问题之一 - 任何未来查看你问题的人都无法获得完整的图片。

我认为你的问题在于你使用的'color'字符应该在一对%{...%}中进行转义:

%{...%}
Include  a string as a literal escape sequence.  The string within the braces
should not change the cursor position.  Brace pairs can nest.

使用您在github上的最新提交,我没有看到这个问题 - 您是否已经解决了它?但是,我发现光标位置和线条绘制存在一些问题,特别是在TAB键方面。按下TAB键时,光标会向上移动一行:

enter image description here 在这里按下TAB键。 enter image description here 在这里按下TAB键。 enter image description here

每次重新绘制PROMPT时,都会将其向上移动一行。通过在%{...%}中封装颜色代码来解决这个问题:

# Solarized Dark colour scheme
BOLD="%{$(tput bold)%}"
RESET="%{$(tput sgr0)%}"
SOLAR_YELLOW="%{$(tput setaf 136)%}"
SOLAR_ORANGE="%{$(tput setaf 166)%}"
SOLAR_RED="%{$(tput setaf 124)%}"
SOLAR_MAGENTA="%{$(tput setaf 125)%}"
SOLAR_VIOLET="%{$(tput setaf 61)%}"
SOLAR_BLUE="%{$(tput setaf 33)%}"
SOLAR_CYAN="%{$(tput setaf 37)%}"
SOLAR_GREEN="%{$(tput setaf 64)%}"
SOLAR_WHITE="%{$(tput setaf 254)%}"

没有原始的~/.zshrc,我不确定是否百分之百正确,但这应该会稍微改善你的提示符。 :)

除了使用橙色外,您还可以使用基于终端的Solarized配置文件和zsh colors,这可能更具可移植性。 不过,如果没有tput,我无法正确设置橙色。

#autoload colors && colors
#SOLAR_YELLOW="%{$fg[yellow]%}"
#SOLAR_ORANGE="%{$(tput setaf 166)%}"
#SOLAR_RED="%{$fg[red]%}"
#SOLAR_MAGENTA="%{$fg[magenta]%}"
#SOLAR_VIOLET="%{$fg_bold[magenta]%}"
#SOLAR_BLUE="%{$fg[blue]%}"
#SOLAR_CYAN="%{$fg[cyan]%}"
#SOLAR_GREEN="%{$fg[green]%}"
#SOLAR_WHITE="%{$fg[white]%}"

我需要转义其他变量吗,还是只需要颜色?例如,我将颜色别名到其他变量中,如:style_path="${RESET}${SOLAR_GREEN}" - user1082754
@OliverJosephAsh 如果它已经在某个地方被转义了,那么你就没问题了 - 我在最早的时间进行了转义(SOLAR_<COLOR>),所以 style_path 将会扩展为 "%{$(tput sgr0)%}%{${tput setaf 64%}",这两个变量已经被转义了 - 转义 '更高级' 的变量不会有任何好处,但也不会有坏处 :) - simont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接