循环浏览输入控制台的语句时,我偶尔会发现输入的文本没有刷新,提示向右移动。
我最初的预期提示: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
和双引号在外壳中的含义不同:强引用与弱引用。
我也只会复制并粘贴带有转义字符的行并修改它们(请注意,它们与文字表示不同)