【问题标题】:Powerline PS1 line wrapping电力线 PS1 换行
【发布时间】:2017-09-02 05:44:56
【问题描述】:

上下文

Powerline 从 Arch linux 包安装,而不是从 pip。

PS1 脚本

update-ps() {
    export PS1="$(powerline shell aboveleft)"
    export PS2="$(powerline shell left)"
}

export PROMPT_COMMAND="update-ps;$PROMPT_COMMAND"

电力线配置


问题

我和him 有同样的问题,当我写几个字符时,换行,我开始写在同一行,覆盖我已经写的内容(包括 ps1)。

我知道这可能是一个不可打印的字符问题,但这是否意味着它是一个电力线错误?还有什么问题?

【问题讨论】:

  • 顺便说一句——POSIX sh 不能保证函数名中允许使用破折号,也不能移植到所有历史 bash 版本;您可能想使用下划线。
  • 更多关于这一点 - 你能提供declare -p PS1declare -p PS2的输出吗?
  • (顺便说一句——除非你还打算用export -f 导出prompt-command 函数,并且不需要任何非bash shell 在你的环境中工作,你应该可能保留PS1PS2PROMPT_COMMAND shell-local 的值,而不是导出它们)。
  • declare -x PS1="seiji   master  ~  \$  "
  • 声明 -x PS2=" \$  "

标签: bash powerline


【解决方案1】:

当语言环境不正确时,或者当 glibc 使用不支持 unicode 字符的“C”语言环境构建时,可能会发生这种情况。 Powerline 使用不间断空格(2 字节),并且三角形也使用 2 字节 unicode 字符。对于这些字符中的每一个,shell(不是 powerline)认为已经打印了 1 个额外的字符。如果提示中有 5 个空格和 3 个三角形,则提示将在到达行尾之前换行 8 个字符。从那里一切行为不正确。这仅与 Powerline 相关,因为 Powerline 在提示中使用 unicode 字符。

解决方法是更正语言环境,以便 shell 理解 2 字节 unicode。您可以运行“locale”以查看 shell 是否使用“C”,在这种情况下需要对其进行修复。对于我的应用程序,我们在运行 Centos Linux 的 Docker 映像中运行 Powerline。我们必须修复 /etc/yum.conf 中的语言环境以使用 utf8 的小写形式,如下所示:

sed -i 's/UTF-8/utf8/' /etc/yum.conf

然后用修复重建 glibc-common:

yum reinstall glibc-common

之后,新终端运行正常,提示正确包装。然后,我们在安装 glibc 之前修改了 Docker 映像以修复 yum.conf。然而,我们发现我们的一个模块将语言环境改回 C (LANG="C"),所以我们使用 LC_ALL 环境变量来覆盖它:

LC_ALL=en_US.UTF_8

之后,所有新终端都正常运行。

【讨论】:

    【解决方案2】:

    对我来说,在 ~.bashrc 中进行更改: 来自:

    . /usr/local/lib/python2.7/dist-packages/powerline/bindings/shell/powerline.sh
    

    . /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh
    

    解决了问题

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 2021-08-12
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多