我正在配置我的 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
变成\[\033
并m
变成m\]
(我前段时间自己学到了这一点这里)。
答案2
正如评论中已经指出的那样,你的问题——即使在“澄清”之后——仍然不清楚和“不完整”。例如,你仍然没有说你是否指终端程序/应用程序/终端仿真器或类型终端(即您键入 $TERM 时获得的值。无论如何,我都会尝试提供答案 - 或者至少为您指明正确的方向。
鉴于你自定义了 bash 提示符,我假设这就是问题的根源。相关讨论的数量、参考资料、有关用户在自定义 bash 后经常遇到的换行问题的信息。在大多数情况下,这似乎是转义 ANSI 颜色代码; 多一点stackoverflow 上的问答。
我再次不确定如何你进行了自定义(该stty
输出没有告诉我任何信息),因为有几种方法可以实现这一点;但是,如果你做了一个备份你的默认设置和文件,这应该是您的第一要务。或者,您也可以尝试shopt -s checkwinsize
确保它被选中,或者只会shopt -p
为您提供以下 bash 选项的列表:-s:已选择或者-u:未选定。另外,请检查您的手册页以了解其中的一些内容,尤其是如果它是您的登录 shell。
最后,提问的时候尽量具体一些;或者更好的是,事先搜索一下可能已经问过的类似问题。