xterm 没有正确包装文本

mul*_*sen 5 linux debian bash xterm bashrc

我正在配置我的 gnome-terminal 和 xterm 列(我还没有选择我将使用其中的哪一个),我有几个问题要解决:

  • 打字区似乎比显示区更小(列更少)
  • 输入的文本在到达末尾时不会换行到下一行 - 它只是在同一行上继续返回,覆盖提示

(我已经用 PS1 设置了一个自定义的 bash 提示,以防万一)

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.1 (wheezy)
Release:    7.1
Codename:   wheezy
$ echo $TERM
xterm
$ stty -a
[peter@mine ~] $ stty -a
speed 38400 baud; rows 52; columns 126; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
$[peter@mine ~] $ # the column width only goes up to here ------------------------------------------------>
Run Code Online (Sandbox Code Playgroud)

结果在 xterm 和 gnome-terminal 3.4.1.1 中是相同的

正如你所看到的,stty -a命令的输出一直到屏幕的边缘,而打字没有那么远。

我发现可以通过将列设置为非常大的数字来获得所需的结果,例如:

$ stty cols 1800
Run Code Online (Sandbox Code Playgroud)

这解决了这两个问题。这是解决这个问题的正确方法吗?这会“破坏”程序的任何输出吗?到目前为止,我已经尝试topstty -a这些看起来OK。

评论中要求的更多信息

我发现,如果我将cat一些输入输入到文件中,那么列实际上会拉伸终端窗口的整个宽度:

[peter@mine applications] $ cat > /tmp/asd
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssqqqqqqqqqqqqqqqq
qqqq
Run Code Online (Sandbox Code Playgroud)

这是否意味着实际上是 bash 限制了列数而不是终端?如果是这样,那么如何更改 bash 中的列数?

小智 9

您的提示定义中可能没有正确转义 ANSI 代码 ~/.bashrc

例如,PS1类似于:

    PS1='\033[1;33m>\033[0m '
Run Code Online (Sandbox Code Playgroud)

... 会在外壳本身的宽度之前包裹得很糟糕。

在 ascii 转义字符之前和定义终止符之后放置方括号将解决此问题,从而导致预期的换行:

    PS1='\[\033[1;33m\]>\[\033[0m\] '      
Run Code Online (Sandbox Code Playgroud)

\033成为\[\033m成为m\]

(我前段时间在这里学到了这一点)。