Bash Shell提示行包装问题

Bash Shell提示行包装问题,bash,colors,prompt,ansi-escape,Bash,Colors,Prompt,Ansi Escape,我在OSX(10.5.7)终端中做了一些事情来破坏我的Bash Shell提示符 这是我配置的PS1: PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ ' 据我所知,我的颜色命令转义正确。但是,当我在命令历史记录中上下滚动时,如果历史命令换行到多行上,我经常会遇到换行问题 我将提示简化为以下内容: PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]' PS2='> ' 我仍然看到这样的情况: localhost:

我在OSX(10.5.7)终端中做了一些事情来破坏我的Bash Shell提示符

这是我配置的PS1:

PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
据我所知,我的颜色命令转义正确。但是,当我在命令历史记录中上下滚动时,如果历史命令换行到多行上,我经常会遇到换行问题

我将提示简化为以下内容:

PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]'
PS2='> '
我仍然看到这样的情况:

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7 5F5-4c91-89C4-3656F6E export PS1="\[ \e[1;32m\]\h\[\e[0m\]: cd Library/Appl ication\ Support/ localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$expocd\{1A2D0EC4-7 5F5-4c91-89C4-3656F6E出口PS1=”\[ \e[1;32m\]\h\[\e[0m\]:光盘库/应用程序 授权\支持/
我也尝试了
\033
而不是
\e
。我只是在那里加入了PS2作为参考,我没有改变默认安装。如果我完全删除颜色代码,那么一切都可以正常工作,有什么想法吗?

Bash中的换行问题不是什么新鲜事。你的
PS1
应该可以正常工作,但有一个bug在Bash 3.2.49中,查阅邮件列表,其中有


除了用
\[
\]
标记不可打印的字符外,其他操作都必须由提示代码完成。

看来您已经正确地转义和封闭了序列

我使用它在结尾添加“\n”的解决方法。我发现它更清晰,并减少了包装问题。我的PS1的确切结尾是:

'\n\[\033[0;30m\]$\[\033[0m\]
你可能知道的一个很好的方法:


似乎相关。正如有人在该线程中指出的,讨论了如何在Bash提示()中正确引用颜色代码,以及如何正确调用终端颜色()。

我现在使用这个PS1,效果很好:

green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ "

现在,滚动我的命令历史记录似乎可以处理换行。但是,由于提出了这个问题,我也将我的OS X更新为10.6.3,以供将来参考,我使用的是:

export PS1=“\[\033[0;31m\][\u@Project:\w]$\[\033[0m\]“

这会将我的shell提示符显示为:

[ec2-user@Project:~]$


帮助我区分live和dev站点。

这是我的:这是我找到的最好的站点,但我最初发现它的站点缺少转义字符,导致换行问题。我对其进行了修补,最终使其正常工作。它以良好的对比度、颜色显示您的用户、路径和分支信息

export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$'
另外,添加

GIT_PS1_SHOWDIRTYSTATE=true
在分支“脏”时显示标记(存在要提交的更改)

在向上滚动bash历史记录时,忽略重复项也很有用

bind "set completion-ignore-case on" 
也有帮助

最后,

shopt -s checkwinsize

如果问题持续存在,可能对OSX有帮助。

'shopt-s checkwinsize'也适用于Cygwin包装问题。

如果您使用的是标题栏技巧
“\e]2;titlebar\a”
,请确保也避开它:
“\[\e]2;titlebar\a\]“

我注意到,即使在
PS1
prompt
环境变量中没有特殊字符,提示光标的定位也存在一些问题

如果输出的文件末尾没有行尾字符,则会混淆提示

您可以通过执行以下操作来复制此信息:

curlhttps://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

并多次按向上键,您将看到提示变得混乱

您可以看到这样一个示例:

出现这种情况时,只需按
,提示将恢复正常


请注意,ZShell没有这个问题。

什么是
$TERM
?如果我没记错的话,Terminal.app的终端模拟与terminfo数据库中的任何东西都不完全匹配,但是
dtterm
很接近。我已经在Fedora8上的bash 3.2.33上试用了您的PS1。即使动态更改屏幕的宽度,它也可以处理长线终端。它在更改高度时打印重复的行,但Ctrl-L修复了该问题。可能是一个错误…@ephemient my$TERM是“xterm-color”,如果问题仍然发生在
TERM=dtterm
(可通过某个终端的设置进行配置),然后我不知道。我已经有好几年没有接触过OS X了。谢谢,我只是想确认我已经正确地逃脱了。对于从谷歌登陆这里的人来说,最初的帖子没有什么问题。关键是使用
\[
\]
(Rob就是这么做的)。为了解决你可能做错了什么的问题(对我来说也是一样哈哈),看(虽然标题暗示了这一点,但它不是mac专用的)。使用tput生成此常见问题解答中所述的颜色代码:并且我的提示滚动效果更好。但是,我也使用了新版本的OS X,因此我不确定是哪个版本修复了此问题。谢谢!这让我疯狂了很长一段时间。我想诀窍在于你的颜色处理方法。我使用此样式处理颜色(这个是蓝色粗体):\e[0;34m这是OS X的真实答案,包括最新的小牛和约塞米蒂,谢谢。+1用于El Capitan和
tput setaf
\[$green\]
语法对我有效;我使用的是
${green}
提示符\u命令中的
导致了奇怪的同一行换行。在macOS Sierra上,标准使用的
\e[38;5;220m
给我换行带来了麻烦,但是简单地用
\[…\]
换行似乎就解决了问题。@Pascal(以及将来这里的其他人),原来的问题应该有效,但当时bash中有一个bug。这与OP的问题有什么关系?你是对的。当时只有一个bug。
shopt -s checkwinsize