将长行连接到Mac OS X终端

时间:2013-05-23 05:07:26

标签: macos shell terminal osx-mountain-lion

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

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

这是截图。请注意该行开头的字符“789abc ...”。

enter image description here

我在终端2.3的10.8.3上。 $ TERM是xterm-256color。

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

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

听起来您没有正确标记PS1提示字符串的非打印部分。非打印部分(例如颜色更改转义序列) - 以及非打印部分 - 需要使用\[ ... \]标记,以便shell可以告诉它们不占用空间屏幕(因此可以告诉在哪里换行)。例如,我的提示字符串是\[\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\] - 正常类型(非打印)
  • $ - 实际命令之前的最终分隔符