Cygwin bash提示在同一行上换行


56

我使用的是Cygwin bash提示符,对于较长的命令,尽管将我的PS1设置为简单的“ $”,但文本仍会绕在同一行,而不是转到下一行。

这是屏幕截图,
屏幕截图


11
什么是TERM环境变量设置为?对于Cygwin控制台,应为cygwin
ak2

1
@ ak2这为我解决了问题,谢谢。Cygwin在Mintty上。
2013年

Answers:


58

我已经在使用MinTTY,并且在PS1中删除换行符也无济于事。此页面上的一条建议确实有所帮助。我执行了这个bash命令:

kill -WINCH $$

就我而言,即使注销并重新登录后,运行一次也解决了该问题。我不确定是否总是这样。


1
从判断-WINCH,这表明bash进程已调整了终端窗口的大小。我猜这应该在每个终端窗口调整大小之后完成。
ivan_pozdeev 2013年

7
@ivan_pozdeev,我只是发现您要做的就是打开vim时调整大小:vim收到信号并以新的大小重新绘制,但是它没有传递给它的父进程,因此bash仍然认为它的大小屏幕是打开vim时的样子。
akatakritos

这对我也
有用

这也对我有用,谢谢@jtpereyda!
詹森·米克

谢谢,这绝对是我的问题-在vim中调整终端的大小。我觉得修复此错误应该很容易,但我不知道。
Iguananaut

22

对我来说,解决方案是在.bashrc中添加以下几行:

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

请注意,提示中的不可打印字符必须包含在 \[...中\]


6
如@ ak2在原始问题下的评论中提到的,导出TERM = cygwin足以解决此问题。
dregad 2014年

1
就我而言,这还不够。如果PS1包含不在\ [... \]中的转义序列,则包装问题将继续存在。在您的情况下,设置TERM env变量可能就足够了,但是我对此表示怀疑。
digory doo 2014年

对我来说,这解决了第二行覆盖第一行的问题,但是,除非我使用正好为80的宽度终端,否则光标位置和文本偏移仍然很奇怪(使用cygwin64,mintty 2.3.7)
MM

为我添加\ [... \]已解决的问题。
Trismegistos

8

我的MinTTY也有同样的问题。该问题可能与主提示(PS1)有关。

对我来说,解决方案是从PS1中删除最后一个“换行”字符(就在“ $”符号之前):

user@host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

user@host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '

user@host ~ $

请参阅http://cygwin.com/ml/cygwin/2001-07/msg00140.html作为参考。

要使更改永久生效,请添加export PS1 ='[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ $'到〜/ .bashrc文件。


1
没为我工作...
HDave

这确实对我有用,但是除了删除最后一个换行符之外,我还必须重新启动Cygwin终端。
christosc

5

正如dregadak2所评论的那样export TERM=cygwin在我的~/.bashrc文件中进行设置足以为我解决此问题。


5

@jtpereyda的答案肯定是正确的。但是由于某种原因,我不能放手,而将其挖得更深一些。

扩展此注释,如果您在vim(或其他任何将tty的控制权移交给shell的全屏应用程序)中调整终端的大小时,结果SIGWINCH通常不会发送到shell,因此当它获得控制权时,它不会不知道终端已经调整大小。

调整终端大小时,应ioctl(..., TIOCSWINSZ, ...)在运行vim的主站上调用on。这反过来会导致killpg(SIGWINCH)on vim的进程组。

问题是vim在其自己的进程组中运行,而该进程组与从中执行的shell不同,因此bash shell无法接收,SIGWINCH并且不会适当地调整其行/列。

如果您想使用永久解决方法,请添加shopt -s checkwinsize到中.bashrc。这使得bash ioctl(..., TIOCGWINSZ, ..)在从每个命令返回后检查窗口大小(),并更新其行/列。


vim与这个问题有什么关系?OP未使用vim。
DavidPostill

1
我的意思是引用一个我认为使连接更明显的问题,但总之,OP问题的可能原因是打开了完整的终端应用程序(如vim),调整了终端的大小,然后退出。正如我所解释的,shell无法看到SIGWINCH,因此当您退出vim时,它仍然认为终端是以前的大小,从而导致各种换行问题。
Iguananaut


2

终端设置有问题(可能是)。
我想您已经尝试退出该会话并重新启动一个会话。

虽然您没有针对Cygwin终端的解决方案,请尝试一下MinTTY(实际上更好)。


1
我在多台计算机的Cygwin中看到了此问题,但MinTTY看起来更好,并且解决了包装问题。两只鸟和一块石头!
2011年

请注意,自2011年底以来,MinTTY是Cygwin的默认终端。
休W

1

正如akatakritos所说,您可能在打开vim时调整了终端的大小。

发生这种情况时,只需再调整一次终端的大小即可解决问题。


谢谢!尽管我没有使用cygwin,但是这在bash中为我解决了“在同一行上包装”的问题-只是最大化终端窗口,然后再次最大化它,问题就消失了:)
Nick Humphrey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.