命令行 - PS1设置导致无法解释的行为

时间:2017-03-27 17:10:36

标签: git macos command-line terminal git-bash

早上好,

我的命令行发生了一些奇怪的事情,我需要一些帮助来找出问题所在。

首先,我一直使用我的Mac Book编写代码超过一年,当我开始时,我使用的是Flatiron School提供的工具。我提到这个是因为我不知道这个.bash_profile文件是如何在我的主目录中创建的,我怀疑它是在我用他们的“帮助”设置我的机器时创建的。我想我正在处理一些版本的Git Bash,但我不确定 - 我是盲目地遵循这个训练营的指示。

最近我更改了CHAR中的本地变量.bash_profile,这是我的PS1设置的一部分。将我的提示从//❤️(默认)更改为⚡️ ⚡️(更酷)。

我阅读了PS1设置,以便更改我的命令行提示,并相信已经做好了一切,但是出现了两个非常烦人的行为:

1)当我删除所有终端输入时,我的提示也会被删除,但在点击后返回如下:(将不得不接受我的话) Issue #1 deleting prompt

2)当我的终端输入到达窗口边缘时,它形成一个5个字符的新行,然后再次形成一个新行:

Issue #2 skipping a line, 5 characters, and a new line

最后,我认为这是我.bash_profile文件中的相关代码,我希望在命令行和PS1中有更多经验的人能够看到我做错了什么,谢谢阅读。

   # This function builds your prompt. It is called below
  function prompt {
    # Define some local colors
    local         RED="\[\033[0;31m\]" # This syntax is some weird bash color thing I never
    local   LIGHT_RED="\[\033[1;31m\]" # really understood
    local        CHAR="\[⚡️  ⚡️\]"
    local   BLUE="\[\e[0;49;34m\]"

    # ♥ ☆ - Keeping some cool ASCII Characters for reference

    # Here is where we actually export the PS1 Variable which stores the text for your prompt

    export PS1="\[\e]2;\u@\h\a[\[\e[37;44;1m\]\t\[\e[0m\]]$RED\$(parse_git_branch) \[\e[32m\]\W\[\e[0m\]\n\[\e[0;31m\]$CHAR \[\e[0m\]"
      PS2='> '
      PS4='+ '
    }

  # Finally call the function and our prompt is all pretty
  prompt

1 个答案:

答案 0 :(得分:1)

尽可能使用硬引号('

......或双重逃脱。

这里真正的问题是,您需要正确说明哪些部分未真正打印,因此字符数为零。如果您错误地指出颜色更改的终端控件(例如,红色为\033[0;31m)具有一定宽度,则行将溢出并且⌫退格可以删除提示(或部分)。

您可以使用方括号表示终端代码的实际宽度为零。但实际上,他们需要转发到'\[''\]'

可以使用双引号,但需要添加额外的转义层,以分别产生"\\[""\\]"

PS1括在单引号(')中几乎完全不同。

如需进一步阅读,请参阅:https://unix.stackexchange.com/questions/150492/backspace-deletes-bash-prompt