在 cygwin 终端窗口中滚动历史记录时,行出现乱码

在 cygwin 终端窗口中滚动历史记录时,行出现乱码

我在 Windows 7 上使用 Cygwin 64 位、最新(今天);在我的终端窗口中,我要么在本地计算机上工作,要么通过 ssh 连接到其他计算机 (Linux)。现在,有时,当我向后滚动 bash 命令的历史记录并传递一些较长的命令(特别是在带有提示的命令越过行尾并进入下一行的情况下)时,继续滚动会打印其他命令在提示行上,但如果新命令较短,则保留(一个/某些)旧命令中的字符,例如:

[me@mine /some/where]$ the quick brown fox jumped over the lazy dog. the
quick brown fox jumped over the lazy dog.

[me@mine /some/where]$ another command altogether over the lazy do

[me@mine /some/where]$ yet another command jumped over the lazy do

现在,并非所有字符都被保留。而且,这种情况并不总是发生——我不确定到底是什么触发了它。

但是,如果我只是使用 putty 等方式 ssh 到远程主机,而不是通过 cygwin - 我不会得到这种行为,所以这似乎是 Cygwin 或其 bash 的问题。

  • 究竟发生了什么事?
  • 原因是什么?
  • 我可以修复它/避免它发生/解决它(除了clear我的意思是运行)吗?

答案1

bash 中行长度的常见问题是迅速的(PS1),通常配置为使用颜色。如果转义序列没有用\[and括起来\],则 bash 对光标位置做出错误的假设。通常在以下情况下报告:编辑一个命令,但是滚动纵观历史,其实并没有什么不同。

如果没有本地定制PS1,下一个要查看的地方是终端描述(值TERM)。 Cygwin 最近使用的mintty作为终端窗口。那是的后裔putty ...它设置TERM=xterm.但mintty行为和行为之间存在差异xterm(正如putty不同之处一样)。跑步tack例如,它建议bw(backward-wrap) 是不正确的。 bash 似乎没有直接使用它(尽管某些脚本可以)。它的前向换行 ( )也am不同于(可以用xtermvttest),并且 bash 可能对 xterm 的行为有一定的依赖性。

如果您使用xtermCygwin 并将其与minttyCygwin 进行比较,您可能会得到更好的比较。

答案2

可能的问题:

  • TTY 管道的某些部分对终端宽度有错误的认识

  • 关于 Unicode 的问题有些令人困惑

  • 你在备用屏幕中,并且字符没有被正确覆盖(我用于这个想法的记忆是模糊的,我可能在这个细节上有错误)

相关内容