设想
- 我喜欢使用多行提示符。
set prompt="${bold}${green}%M${white}:${red}%c5${unbold} \n${white}% "
- 我经常将终端行复制/粘贴到 Windows 电子邮件中。
问题
看来 tcsh 不会将真正的换行符打印到终端。它似乎打印了足够的空格字符来导致换行。这导致我粘贴到 Windows 电子邮件时不会将提示符的 2cd 行放在新行上。相反,我只得到一堆空格字符。
我有这些 Xresources:
xterm*trimSelection: true
xterm*highlightSelection: true
这种抓取可以很容易地看出出了什么问题。查看 ls 输出中如何出现换行符。但我的提示符的第一行实际上只是足够的空格来导致换行,但不是换行符。三击(行)选择还清楚地表明我的“多行”提示实际上只是嵌入了空格的单行。
缺少分叉/重新编译 tcsh,有谁知道如何解决这个问题?
谢谢!
——迈尔斯
答案1
tl;dr 将其添加到您的~/.tcshrc
或~/.cshrc
:
settc am no
这样做的一个令人讨厌的意想不到的影响是,通过多行包装的长命令在选择时会插入换行符 - 由您来决定哪一个更糟糕。
如果你跑tcsh
进去script(1)
,你会清楚地看到它在做什么:
$ script -qc tcsh
tcsh% set prompt = "foo\nbar% "
foo
bar% exit
exit
$ cat -v typescript
...
foo^[[80G ^Mbar% exit^M^M
tcsh
会将提示内的换行符转换为移动到最后一列(通过hpa
/ch
\e[80G
转义),后跟两个空格和回车符(仅tcsh
会这样做;真正的csh
不会)。你可以看看MoveToLine()
它的函数源代码。
由于某种原因,xterm
其他终端模拟器会将移动到最后一列的操作解释为好像整行都充满了空格,highlightSelection
无论任何设置如何。
一个快速而肮脏的解决方法是让tcsh
您的终端相信没有自动边距,这就是该settc am no
命令的作用。