在MacOS上使用iTerm2的Zsh,带有一个小窗格和一个长提示:删除提示后的空格

问题描述 投票:0回答:1

解决方案仍未找到:

我在zsh上遇到了不同的问题,这在MaOS Catalina/iTerm2上是无法预料的。

I)确实,例如,如果我将iTerm2的大原始窗口(仅一次终端)划分为4个窗格,而且,如果提示较长,则end of prompt与命令已删除。

II)其他固定行为:例如,如果我在此窗格中执行ls命令,并在请求completionTAB之后执行,则第二个字母“ s” 'ls'已删除或其他行为ls命令与完成时建议的目录/文件之间没有更多空间。

下面是碎石捕获,以说明和帮助您理解:

[1)初始窗格,我将错误复制到右下方窗格中:

enter image description here

2)使用'ls'命令完成:将光标移到'ls'的第二个字母,即's']

enter image description here

3)

完成示例,此处带有'ls'命令:命令'ls'和目录/文件之间的空间已完成,或最后一个紫色管道符号和命令'ls之间的空间'已删除。

enter image description here

我想获得一些建议来解决问题[[2)

3)。理想情况下,我想保留我的长提示(由于当前目录的PATH很长),并理解为什么我会有这些奇怪的行为。我的提示被定义为.zshrc

PS1='%F{magenta}|%F{green}%n@%F{cyan}%m%F{magenta}|%f%T%F{magenta}|%B%~%b%F{magenta}|%f '

您可以在提示符|%f '的末尾看到空格,这似乎没有受到尊重

我知道我的问题肯定来自长提示(如果我在$ HOME中应用相同的命令'ls',则一切工作正常,即完成不会删除任何空间。

这就是为什么我也试图在.zshrc中使用此代码(来自http://aperiodic.net/phil/prompt/)来截断PATH的原因:

### # Truncate the path if it's too long. PR_FILLBAR="" PR_PWDLEN="" local promptsize=${#${(%):---(%n@%m:%l)---()--}} local pwdsize=${#${(%):-%~}} if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then ((PR_PWDLEN=$TERMWIDTH - $promptsize)) else PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}" fi

但是它什么也不做,PATH保持不变...

如果某人遇到相同类型的问题,最好告诉可能的解决方案。而且,也欢迎任何反馈。

UPDATE 1:

我会得到更好的结果,因为我会对其进行改进,即zsh会自动截断长目录名,且之前已确定限制。
在此之前,我向您展示了我想要获得的结果:

下面用于此图的PS1带有:

PS1='%F{magenta}|%F{green}%n@%F{cyan}%m%F{magenta}|%f%T%F{magenta}|%F{75}%-2d~/.../%F{13}%1~%F{magenta}| '

以及第三行的结果:

zsh prompt

请求1:

对我来说,这是第一个有趣的结果,因为我只希望当前目录的颜色与我要截断的上述路径的颜色不同。

如您所见,问题仍然存在,即目录

Travail_3_Alain_Injection_des_Biais_Spectro_dans_XSAF_avec_GCph+WL+XC_et_rajout_dun_Prior_dans_la_matrice_de_Fisher_de_SpecSAF_15_JANVIER_2020

非常非常长。 

请求2:

所以,我知道可能很难实现,但是对于给定的最大数目的固定字符,是否有可能将完整路径的所有组成部分(我的意思是上面的目录)截断为我们要使用的另一个组成部分在目录的开始和结束之间应用了截断吗?

例如,目录

Travail_3_Alain_Injection_des_Biais_Spectro_dans_XSAF_avec_GCph+WL+XC_et_rajout_dun_Prior_dans_la_matrice_de_Fisher_de_SpecSAF_15_JANVIER_2020

将成为:

Travail_3_...SpecSAF_15_JANVIER_2020

我想在完整路径(截断,当前目录除外,颜色为75)和当前目录(上面我上一个结果中的颜色13)之间保留2种不同的颜色。

顺便说一下,$reset_color函数是什么:必须使用它吗?

UPDATE 2:

我暂时设置了以下提示:
PS1='%F{13}|%F{green}%n@%F{cyan}%m%F{13}|%f%T%F{13}|%F{75}%-4d/…… %F{13}%1~%F{13}|%F{15} '
提供以下渲染:

enter image description here

如您所见,在提示的第一部分中,我最多可以显示目录的第四深度(%~4d)。在第一部分之后,我将显示当前目录(按%1~)。

请求3:

几乎是我想要得到的结果:首先,将父目录的颜色设置为定义颜色的第四个深度(此处为%F{75},然后将……符号后的当前目录的颜色定义为另一种颜色(在我的情况是%F{13}

几乎因为当我键入cd命令时,我得到以下结果:

`|fab@astro|6:50|/Users/fab/……~|`

如您所见,我只想得到:

`|fab@astro|6:50|~|`

即,使路径/Users/fab/……消失到提示中,因为~/Users/fab/引用的是同一事物。

[一般来说,我总是将/Users/fab/替换为~,即替换我显示的所有提示。

如何解决?

REQUEST 4:

仍然是提示和命令之间的空间问题,当我进入一个小窗格时,它们会干扰。我不知道如何防止这个空间消失。 我有一个认真的轨道:由于窗格很小,因此提示显示在多行中,因此我意识到这种现象会发生,因此提示不能包含在一行上,就像这样:
zsh prompt on multiple lines since pane is small

[我也想纠正此“ space removing”的错误。

我认为一种解决方案可能是截断提示的第二部分(当前目录),以使其仅包含在一行中

(就像我在上面的[[REQUEST 2
中指出的那样)),但是如何执行吗? 解决方案仍未找到:抱歉,我相信zsh-5.8可以解决此问题,但实际上,根据我的上次测试,情况并非如此。

解决方案仍未找到:使用zsh时我遇到了不同的问题,这在MaOS Catalina / iTerm2上是无法预料的。 I)确实,例如,如果我分割了iTerm2的大原始窗口(仅一次...

zsh prompt iterm2 zshrc zsh-completion
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.