5

当我粘贴一个长字符串(即,比终端窗口的宽度更多的字符)时,终端不会自动滚动并将它们放在多行中。

相反,它基本上换行到同一行。换句话说,它打印到当前行的末尾,然后从同一行的开头开始打印现有字符行的开头开始打印现有字符...

这是一个屏幕截图。注意行首的字符“789abc...”。

在此处输入图像描述

我在 10.8.3 和 Terminal 2.3 上。$TERM 是 xterm-256color。

一位同事的机器设置完全相同(尽管终端颜色不同,可能还有其他配置),他可以让它滚动。

有任何想法吗?

谢谢!

4

1 回答 1

6

听起来您没有正确标记 PS1 提示字符串的非打印部分。非打印部分(例如颜色更改转义序列) - 并且只有非打印部分 - 需要标记,\[ ... \]以便外壳可以告诉它们不占用屏幕上的空间(因此可以知道在哪里换行)。例如,我的提示字符串是\[\e[0;32m\]\h\[\e[m\]:\W \[\e[0;34m\]\u\[\e[m\]$,解析为:

  • \[\e[0;32m\]- 将颜色更改为绿色类型(非打印,所以它被包裹在\[ ... \]
  • \h- 主机名(打印)
  • \[\e[m\]- 正常打印(无颜色)(非打印,因此包装)
  • :\W- 当前目录(和分隔符)(打印)
  • \[\e[0;34m\]- 更改为蓝色类型(非印刷)
  • \u- 主机名(打印)
  • \[\e[m\]- 普通类型(非印刷)
  • $- 实际命令之前的最终分隔符
于 2013-05-23T05:32:39.833 回答