修改终端提示后,文本不清除

时间:2017-06-28 03:00:18

标签: terminal command-prompt prompt

注意:我正在运行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个字符时,则该单词的前4个字符“粘”'到提示的初始部分。

  3. 这个'粘性部分'不能被我删除,当我再按几次向上箭头键时,它甚至都没有删除。

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

    然后,当我逐步按向上键查看以前的命令时:

    enter image description here

    help可以正常显示。

    enter image description here

    this that可以正常显示。

    enter image description here

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

    enter image description here

    按下向上键继续留下。

    如何解决此问题?

1 个答案:

答案 0 :(得分: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\]"