Answers:
我已经在使用MinTTY,并且在PS1中删除换行符也无济于事。此页面上的一条建议确实有所帮助。我执行了这个bash命令:
kill -WINCH $$
就我而言,即使注销并重新登录后,运行一次也解决了该问题。我不确定是否总是这样。
-WINCH
,这表明bash进程已调整了终端窗口的大小。我猜这应该在每个终端窗口调整大小之后完成。
对我来说,解决方案是在.bashrc中添加以下几行:
PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM
请注意,提示中的不可打印字符必须包含在
\[
...中\]
。
我的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文件。
@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, ..)
在从每个命令返回后检查窗口大小(),并更新其行/列。
正如akatakritos所说,您可能在打开vim时调整了终端的大小。
发生这种情况时,只需再调整一次终端的大小即可解决问题。
TERM
环境变量设置为?对于Cygwin控制台,应为cygwin
。