我在 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)" }