我在 Mac OS X Lion 的终端应用程序中遇到了一个奇怪的问题。当我输入一长行文本时,它应该在到达终端窗口的边缘时换行到下一行,它会继续在其上一行的文本顶部键入。
以下是一些屏幕截图以帮助说明问题:
在我的文字到达窗口边缘之前:
文本到达窗口边缘后:
我还提供了我的文本和窗口设置的屏幕截图,以备不时之需。
文字设置:
窗口设置:
提前感谢您提供的任何帮助。我有这个问题有一段时间了,只是从来没有解决过。当我遇到需要大 grep 命令和长路径名的事情时,它现在真的变得很痛苦。
PS1
环境变量决定了 shell 的提示符是什么样的。man bash
提供完整的文档。(实际上有几个,用于不同的模式)。
有许多文件可以设置它,通常是~/.profile
、或.~/.bashrc
/etc/profile
/etc/bashrc
如果您要在其中包含颜色代码或其他控制序列,则必须正确地将它们包装起来(\[
而\]
不是包装普通文本),否则行编辑可能会像您的情况一样混乱。我建议重置PS1
为默认值,然后仔细逐项添加着色。
例如:
PS1='\[\033[1m\033[32m\]\u@\h \w\[\033[0m\]\$ '
^^^^^^^^^^^^^^^ ^^^^^^^
着色命令带有下划线。注意它们是如何被包围的\[ \]
。
我有同样的问题,我发现如果你改变
高级 >仿真> 将终端声明为:ANSI。
这解决了彩色 PS1 问题。使用 Mac 终端
但是会产生一种奇怪的行为:我找到了@koiyu 答案的解决方案。
由于不正确地使用颜色代码,我曾经遇到过同样的问题。这是我的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 $ "
希望这可以帮助。
在hamstergene的指导下,我能够弄清楚如何让它发挥得更好。使用这个 Geek Stuff 指南和这个 It's Me Tommy 教程,我能够定义我希望我的 PS1 文本如何显示。将其更改为更简化的内容消除了我遇到的奇怪的重叠文本问题。
前:
后:
我只是编辑了我的.bash_profile
并添加了以下行:
export PS1="[\u@\h] > ";
然后我去改变了窗户的颜色,因为我可以。
最初的问题是 PS1 中有一条新线(仅供参考)
通常它不正确地转义颜色代码,但如果不是这样,你的 ps1 中有一个新行
正如其他人所说,您必须将颜色命令正确包装在转义方括号中。然而,对我来说,这让字符串看起来非常非常令人困惑!
因此,这是我用来始终正确并使其更具可读性的技巧。
我首先创建了一个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)\$ "
希望这可以帮助!