【问题标题】:Text doesn't clear after modifying terminal prompt修改终端提示后文字不清晰
【发布时间】:2017-06-28 03:00:17
【问题描述】:

注意:我运行的是 Mac OS X Sierra,但这个问题也出现在 Ubuntu 上。

我已经自定义了终端提示:

export PS1="\n\[\033[1;31m\]\u ????  \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \e[0m"

请注意,我在末尾添加了一个换行符,因此我开始在 > 之后的新行中输入命令。我已经在多台机器上这样做了,并且我注意到每当我添加换行符时,终端的行为都会很奇怪。

奇怪的是,我所指的确切行为是这样的(如果您使用我提到的 PS1 值,这包括复制错误的步骤):

  1. 按向上箭头键访问旧命令。

  2. 当我在历史记录中遇到一个包含超过 1 个单词的命令,并且第一个单词的长度超过 4 个字符时,那么单词 'stick' 的前 4 个字符将提示。

  3. 这个“粘滞部分”我无法删除,连按几次向上箭头键都删除不了。

例如,如果我输入的最后 4 个命令是(从最近到最近):clearman manthis thathelp

然后,当我通过递增按向上键查看之前的命令时:

help 正常可见。

this that 正常可见。

注意this 是如何附加在开头的。如果我尝试,我无法删除它。

按向上键时继续停留。

我该如何解决这个问题?

【问题讨论】:

    标签: terminal command-prompt prompt


    【解决方案1】:

    提示符中的每个转义序列都必须用 \[\] 括起来,以告诉 bash 应该忽略这些字符的计数列。您示例中的最后一个没有括号:

    export PS1="\n\[\033[1;31m\]\u ?  \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \e[0m"
    

    \e[0m

    如果您修复了错误,bash 可能会提供更好的结果。这显示了建议的更正;

    export PS1="\n\[\033[1;31m\]\u ?  \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \[\e[0m\]"
    

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多