Cygwin bash 提示符在同一行上换行

Cygwin bash 提示符在同一行上换行

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

这是屏幕截图,
截屏

答案1

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

kill -WINCH $$

就我的情况而言,运行一次此程序即可解决问题,即使退出并重新登录后也是如此。我不确定是否总是如此。

答案2

对我来说,解决方案是将以下行添加到 .bashrc:

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

请注意,提示中的不可打印字符必须用 \[...括起来\]

答案3

我在使用 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 文件中。

答案4

@jtpereyda 的回答确实很正确。但出于某种原因,我无法放过这一点,并进一步深入挖掘。

扩展此评论,如果你在 vim 中调整终端大小(或任何其他从 shell 中夺取 tty 控制权的全屏应用程序),结果SIGWINCH通常是不是发送到 shell,因此当它重新获得控制权时,它并不知道终端已被调整大小。

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

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

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

相关内容