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提示如何

我注意到,即使在PS1PROMPT环境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\]"