Shell Prompt Line Wrapping Issue
我已经做了一些在OS X(10.5.7)terminal打破我的Bash Shell提示。
这是我configuration的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 支持/支持/
我也试过\033
而不是\e
。 我只是把PS2包含在那里以获取信息,我没有从安装默认中更改它。 如果我完全删除颜色代码,那么一切正常,任何想法?
在Bash中换行问题并不新鲜。 查阅邮件列表,也许还有另一个bug。
除了标记不可打印的字符之外,您不能做太多的事情,其他的必须由提示代码来完成。
我现在用这个PS1效果很好:
green=$(tput setaf 2) blue=$(tput setaf 4) bold=$(tput bold) reset=$(tput sgr0) PS1='\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ '
滚动浏览我的命令历史logging似乎现在处理换行。 然而,在问这个问题的同时,我也更新了我的OS X到10.6.3
这个stackoverflow线程似乎相关。 正如有人在该主题中指出的那样, mywiki.wooledge.org上的Bash FAQ讨论了如何在Bash提示中正确引用颜色代码( FAQ 53 )以及正确调用terminal颜色( FAQ 37 )。
这里是我的:这是我find的最好的一个,但我最初发现它的网站缺less一个转义字符,导致了换行问题。 我修补它,并最终得到它的工作。 它显示您的用户,path和分支信息,具有良好的对比度,色彩明智。
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
要在分支“脏”时显示标记(存在要更改的部分)
export HISTCONTROL=ignoredups
在通过bash历史滚动时忽略重复也很有用。
bind "set completion-ignore-case on"
也帮助。
最后,
shopt -s checkwinsize
如果问题仍然存在,可能对OSX有帮助。
看来你已经正确逃脱并附上了序列。
一个解决方法,我反正用它来添加一个'\ n'在最后。 我发现它更清晰,减less了包装问题的任何问题。 我的PS1的确切结尾是:
'\n\[\033[0;30m\]$\[\033[0m\]
一个很好的howto你可能知道:
Bash提示如何
我注意到,即使在PS1
或PROMPT
环境variables中没有特殊字符,提示光标定位也存在一些问题。
如果我们输出的文件末尾没有行尾字符。 这会混淆提示。
你可以通过这样做来重现这一点:
curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt
并多次按下上键,你会看到提示变得困惑。
你可以看到一个这样的例子:
https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca
发生这种情况时,只需按下<CTRL-C>
,提示符就会恢复正常。
请注意,ZShell没有这个问题。
为了将来的参考,这是我使用的:
export PS1="\[\033[0;31m\][\u@Project:\w]$\[\033[0m\] "
这将显示我的shell提示符如下:
[ec2-user@Project:~]$
帮助我区分实时和开发网站。
“shopt -s checkwinsize”也适用于Cygwin包装问题
如果您使用标题栏技巧"\e]2;titlebar\a"
,请务必转义: "\[\e]2;titlebar\a\]"