我在Mac OS X Lion的终端应用中遇到了一个奇怪的问题。当我输入一长串文本时,当它到达终端窗口的边缘时应该换行到下一行,它会继续在文本上方的行上键入。
以下是一些帮助说明问题的屏幕截图:
在我的文字到达窗口边缘之前:
文字到达窗口边缘后
我还提供了文字和窗口设置的屏幕截图,以防有些帮助。
文字设置:
窗口设置:
提前感谢您提供的任何帮助。我有一段时间没有这个问题,只是从未接触过它。当我遇到需要大grep命令和长路径名的东西时,它现在真的变得很痛苦。
答案 0 :(得分:61)
PS1
环境变量确定shell的提示符。 man bash
提供完整的文档。 (实际上有几个,针对不同的模式)。
可以设置多个文件,通常是~/.profile
,~/.bashrc
,/etc/profile
或/etc/bashrc
中的一个。
如果您要在其中包含颜色代码或其他控制序列,则必须正确地用\[
和\]
包裹它们(并且不包装普通文本),否则行编辑可能会变得混乱像你的情况一样。我建议将PS1
重置为默认值,然后小心地逐项添加着色。
例如:
PS1='\[\033[1m\033[32m\]\u@\h \w\[\033[0m\]\$ '
^^^^^^^^^^^^^^^ ^^^^^^^
着色命令带有下划线。请注意它们是如何被\[ \]
包围的。
答案 1 :(得分:7)
我有同样的问题,我发现如果你改变了
高级> 仿真>将终端声明为:ANSI。
这解决了彩色PS1问题。使用Mac终端
但是会产生一种奇怪的行为: 我找到了解决@koiyu回答问题的方法。
答案 2 :(得分:5)
由于错误使用颜色代码,我曾经遇到同样的问题。这是我的PS1解决了这个问题。此外,如果您使用GIT,那么这将有助于显示您正在处理的git分支以及您的工作树是否脏。把它放在.profile或.bash_profile
中# Git branch in prompt.
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
parse_git_dirty() {
st=$(git status 2>/dev/null | tail -n 1)
if [[ $st == "" ]]; then
echo ''
elif [[ $st == "nothing to commit (working directory clean)" ]]; then
echo ''
elif [[ $st == 'nothing added to commit but untracked files present (use "git add" to track)' ]]; then
echo '?'
else
echo '*'
fi
}
# coloring the terminal comman line
SB_GREEN="\[\033[1;32m\]"
SB_BLUE="\[\033[1;34m\]"
SB_RED="\[\033[1;31m\]"
SB_NOCOLOR="\[\033[0m\]"
export PS1="$SB_GREEN\u@\h$SB_NOCOLOR: $SB_BLUE\w$SB_GREEN\$(parse_git_branch)$SB_RED\$(parse_git_dirty)$SB_NOCOLOR $ "
希望这有帮助。
答案 3 :(得分:1)
在hamstergene的指导下,我能够弄清楚如何让它发挥出色。使用this Geek Stuff guide和this It's Me Tommy tutorial,我能够定义我希望如何显示PS1文本。将此更改为更简化的内容消除了我遇到的奇怪的重叠文本问题。
<强>之前:强>
<强>后:强>
我只是编辑了我的.bash_profile
并添加了以下行:
export PS1="[\u@\h] > ";
然后我去改变窗口的颜色,因为我可以。
答案 4 :(得分:0)
正如其他人所说,您必须将颜色命令正确包装在转义的方括号中。但是,对我来说,这让字符串看起来真的非常混乱!
因此,这是我经常使用的一种技巧,可以使它正确并使其更具可读性。
我首先像这样创建一个名为setColor
的shell函数...
setColor(){
echo "\[\033[${1}m\]"
}
然后我像这样使用它...
PS1="$(setColor 92)\u$(setColor 37):$(setColor 96)\w $(setColor)\$ "
这与写这篇文章...
\[\033[92m\]\u\[\033[37m\]:\[\033[96m\]\w \[\033[m\]$
...但是正如您所看到的,前者更加清晰,而且还可以确保所有内容均已正确转义。
请注意,您也可以使用;
字符来指定多种颜色。唯一的事情是您必须显式转义它,因此92;41
变成92\;41
,就像这样……
PS1="$(setColor 92\;41)\u$(setColor 37):$(setColor 96)\w $(setColor)\$ "
再次,比这还容易阅读...
\[\033[92;41m\]\u\[\033[37m\]:\[\033[96m\]\w \[\033[m\]$
您可以通过定义颜色常量,甚至使用您最常用的颜色名称的“包装”函数来更进一步,从而可以编写此代码...
PS1="$(setRed)\u$(setBlue):$(setGreen)\w $(resetColor)\$ "
希望这会有所帮助!