xterm 无法正确换行

xterm 无法正确换行

我正在配置我的 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 ------------------------------------------------>

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

如您所见,命令的输出stty -a一直到达屏幕边缘,而输入的内容却没有到达那么远。

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

$ stty cols 1800

这解决了两个问题。这是解决这个问题的正确方法吗?这会“破坏”程序的任何输出吗?到目前为止,我已经尝试过了,top这些stty -a似乎没问题。

根据评论中的要求提供更多信息

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

[peter@mine applications] $ cat > /tmp/asd
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssqqqqqqqqqqqqqqqq
qqqq

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

答案1

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

例如PS1

    PS1='\033[1;33m>\033[0m '

... 会包裹得不好,在壳本身的宽度之前。

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

    PS1='\[\033[1;33m\]>\[\033[0m\] '      

\033变成\[\033m变成m\]

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

答案2

正如评论中已经指出的那样,你的问题——即使在“澄清”之后——仍然不清楚和“不完整”。例如,你仍然没有说你是否终端程序/应用程序/终端仿真器或类型终端(即您键入 $TERM 时获得的值。无论如何,我都会尝试提供答案 - 或者至少为您指明正确的方向。

鉴于你自定义了 bash 提示符,我假设这就是问题的根源。相关讨论的数量、参考资料、有关用户在自定义 bash 后经常遇到的换行问题的信息。在大多数情况下,这似乎是转义 ANSI 颜色代码; 多一点stackoverflow 上的问答

我再次不确定如何你进行了自定义(该stty输出没有告诉我任何信息),因为有几种方法可以实现这一点;但是,如果你做了一个备份你的默认设置文件,这应该是您的第一要务。或者,您也可以尝试shopt -s checkwinsize确保它被选中,或者只会shopt -p为您提供以下 bash 选项的列表:-s已选择或者-u未选定。另外,请检查您的手册页以了解其中的一些内容,尤其是如果它是您的登录 shell。

最后,提问的时候尽量具体一些;或者更好的是,事先搜索一下可能已经问过的类似问题。

相关内容