Kitty 中多行命令的奇怪输出?

Kitty 中多行命令的奇怪输出?

我在 VMWare 14.0 上运行非 GUI ArchLinux。我在上面安装了一个 ssh 服务器(通过 openssh)并使用连接到我的虚拟机小猫 0.70在 Windows 10 [版本 10.0.15063] 上。

我的问题是:当我使用多行命令时,Kitty 中的命令输出非常奇怪。


例如:

在 Kitty ssh 客户端上:

[ddk@mylinux:~]
14:23:08 $ if [[ -o interactive ]]
if> then
then> echo 'inter'
then> fi

then         # not my typing
echo 'inter' # not my typing
fi)inter     # not my typing
[ddk@mylinux:~]
14:23:34 $

在我的虚拟机的终端上:

[ddk@mylinux:~]
14:23:54 $ if [[ -o interactive ]]
if > then
then > echo interactive
then > fi
interactive
[ddk@mylinux:~]
14:24:37 $

那么如何修复 Kitty ssh 客户端上的不正确输出呢?

P/S:我正在跑步桀骜没有任何预配置脚本,例如哦我的zsh。这是我的.zshrc

答案1

正如 Stéphane Chazelas 所说,问题出在你的preexec职能上。设置终端标题时,您使用的命令不保护其特殊字符。命令中的第一个换行符终止转义序列以设置标题,然后打印其他行。

您还会遇到命令中反斜杠和百分比字符的问题,因为print执行反斜杠扩展并且您还在命令上执行提示百分比扩展。

解决方案是删除或编码控制字符,并执行反斜杠扩展以将控制字符与提示符中的字符分开。例如:

set_title () { print -rn $'\e]0;'${${:-${(%):-$1}$2}//[^[:print:]]/_}$'\a' }
precmd () { set_title '[%n@%M:%~]' '' }
preexec () { set_title '[%n@%M:%~]' " ($1)" }

相关内容