【问题标题】:Cygwin wraps text back on to the same line, causing text to be overwrittenCygwin 将文本回绕到同一行,导致文本被覆盖
【发布时间】:2013-12-20 05:52:40
【问题描述】:

我在我的 Windows 7 机器上安装了 cygwin,我遇到了一个问题,当我键入命令时,它偶尔会被回绕到同一行,删除 bash 提示符。 这里是一个例子:

有问题的命令是命令“201”(从底部算起 4 行)。我包括了其他的上下文。

我输入的命令文本是

git commit -m "Forced LF line endings."

注意:我主要使用 git 命令发布此内容,但任何命令都会出现问题。我还没有注意到模式。

它跳到行首并开始覆盖我的提示。

当我按下向上箭头(查看历史记录)时,结果更奇怪:

(注意光标在命令末尾之后有很多字符。) 当我尝试从该位置退格光标时,我只能返回这么远:

然后,当我从该退格行进入历史记录时,我得到:

命令从显示的文本末尾开始。(这对于整个历史记录都是一致的)但是当我在历史记录中上升到错误的git commit ... 时,它会显示为之前对覆盖的文本进行了处理,但是当我经过它时,它会删除提示的一行,并以与之前相同的方式显示历史记录中的上一个条目(如图 2 所示)。

当我创建我的 PS1 变量时,我有这样奇怪的输出,但我已经关闭了我的括号和东西,不认为这是导致问题的原因。但是,如果您想查看我的.bash_profile(设置 PS1),请随时在GitHub 上查看。它真的很短。

我已尝试搜索该问题,但只能找到一些关于 xterm 中换行的 cygwin 电子邮件存档,但没有解决方案。

PS:在推送最新的.bash_profile时,为了链接它,我在输入git add .bash_profile并回车时再次遇到问题,它运行了命令但是将光标返回到开始相同的命令,而不是打印一个新的提示。 然后当我写另一个提交行时,它和第一个图像一样,但是 它把该行的其余部分涂黑(它包裹了该行,但覆盖了整行,而不仅仅是第一行几个字符。)

【问题讨论】:

  • 我认为这是因为您没有正确编码提示符中的转义序列,因此 bash 对行上的剩余空间量感到困惑。
  • 您能详细说明一下吗?我该如何解决这个问题?

标签: bash cygwin xterm


【解决方案1】:

http://manpages.ubuntu.com/manpages/lucid/man1/bash.1.html#contenttoc26:

\[

开始一系列非打印字符,可用于将终端控制序列嵌入到提示符中

\]

结束一系列非打印字符

如果您没有在提示中包含非打印字符(例如颜色序列),则它们的长度将被计为提示长度的一部分,最终导致您描述的症状。

【讨论】:

  • 我会对此进行测试并回复您。
  • 我在我的新 Mac 终端上对其进行了测试,它似乎工作正常。我将看看它在其他终端上是否也一样,但现在,你得到了公认的答案。颜色代码似乎需要以\e[ 开头,然后以\] 结束。我的 vim 语法高亮不匹配,所以我添加了太多。
  • 我最终使用 bash 的 $(tput setaf #) 来设置颜色。它似乎比大括号好得多。
  • 天哪,是的,我遇到这个问题好几年了,一直不知道为什么! (不小心把\W放在\[ ... \]里面)
【解决方案2】:

这对我来说并不经常发生。当它出现时,我只需在 cygwin 终端中输入 'kill -WINCH $$' 即可解决问题。 link to source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多