PS1 中的内容导致我的 Terminal.app 命令卡在屏幕上



循环浏览输入控制台的语句时,我偶尔会发现输入的文本没有刷新,提示向右移动。

我最初的预期提示:http://cl.ly/image/04080N260L1V。

点击向上和向下箭头大约十几次后会发生什么:http://cl.ly/image/1n3S2K31340R。

如果屏幕截图不清楚,带下划线的文本(在本例中为"vim ~/.bas")将被"添加"到提示中。我无法将其删除。但是,如果我尽可能多地删除,清除提示的任何文本,然后按 Enter,我就会再次收到干净的原始提示:http://cl.ly/image/2O1h1Z2y0n2I。

以下是~/.bash_profile包含的内容:

# Simpler bash prompt in Terminal.app
promptColor="e[1;34m"
endColor="e[m"
#export PS1='e[0;36mw$ e[0m'
export PS1="$promptColorw$ $endColor"
# Syntax highlighting for commands like `ls` and such
alias ls="ls -G"
# PATH ammendment to put Homebrew-installed apps in front of system-provided ones
homebrew=/usr/local/bin:/usr/local/sbin:/usr/local/share/npm/bin
export PATH=$homebrew:$PATH

我已经将罪魁祸首缩小到 PS1 变量。(你可以看到我已经尝试了几种不同的方法。根据我所阅读的内容,我正确使用了颜色代码。

任何帮助都会很棒。谢谢。

这是一个常见问题解答。为了使 Bash 能够正确计算提示的显示长度,任何非打印序列(如颜色代码)都需要位于[...]序列中。

我想你想要:

promptColor='e[1;34m'
endColor='e[m'
export PS1="$promptColor"'w$ '"$endColor"

(请注意从双引号到单引号的所有细微变化)

问题在于,当需要明确解释时,bash 正在对以下内容进行扩展:

  • e[1;34m
  • w$
  • e[m
单引号

和双引号在外壳中的含义不同:强引用与弱引用。

我也只会复制并粘贴带有转义字符的行并修改它们(请注意,它们与文字表示不同)

相关内容

  • 没有找到相关文章

最新更新