Bash Shell提示行包装问题
我在OSX(10.5.7)终端中做了一些事情来破坏我的Bash Shell提示符 这是我配置的PS1: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:
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