jtp*_*yda 68
我已经在使用 MinTTY,在 PS1 中删除换行符也没有帮助。此页面上的一条建议确实有所帮助。我执行了这个 bash 命令:
kill -WINCH $$
Run Code Online (Sandbox Code Playgroud)
就我而言,即使在注销并重新登录后,运行它也可以解决问题。我不确定是否总是如此。
dig*_*doo 26
对我来说,解决方案是将以下几行添加到 .bashrc:
PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM
Run Code Online (Sandbox Code Playgroud)
请注意,提示中的不可打印字符必须包含在
\[
... 中\]
。
小智 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 ~ $
Run Code Online (Sandbox Code Playgroud)
请参阅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 的全屏应用程序)中调整终端的大小,结果SIGWINCH
通常不会发送到外壳,因此当它重新获得控制权时,它不会不知道终端已调整大小。
当您调整终端大小时,它应该ioctl(..., TIOCSWINSZ, ...)
在运行 vim 的主 pty 上调用 an 。这反过来会导致一个killpg(SIGWINCH)
on vim 的进程组。
问题是 vim 在它自己的进程组中运行,与它被执行的 shell 不同,所以 bash shell 没有收到SIGWINCH
并且没有适当地调整它的行/列。
如果您想要永久的解决方法,请添加shopt -s checkwinsize
到您的.bashrc
. 这使得 bashioctl(..., TIOCGWINSZ, ..)
在从每个命令返回后检查窗口大小 ( ),并更新其行/列。