我最近从 WSL(适用于 Linux 的 Windows 子系统)版本 1 升级到了版本 2。我在使用编辑器时遇到了问题;有时,当我退出 Nano 或 Vim 时,它会清除我的历史记录。我仍然安装了 WSL V1 以供比较。
我在 Windows 10 上运行,使用 ConEmu 终端。我的 WSL V1 安装是 Ubuntu 18.04,我的 WSL V2 安装在 Ubuntu 20.04。两个 WSL 设置都使用 xterm-256color。
以下是症状:
- 清除历史记录后,Nano/Vim 的最后一个可见屏幕会留在终端历史记录中,但没有任何颜色(它会变成白色),并且其下方有足够的空白行,使其超出了屏幕顶部。我看到的只是一个空白屏幕底部的单个提示符。除了我在编辑器中打开的最后一个屏幕、空白行和单个终端提示符外,没有终端历史记录。
- 仅当我的终端历史记录超过一整屏时,历史记录才会清除。当我的终端历史记录少于一整屏时(即没有滚动条),Nano/Vim 会正常退出(它们会保留终端历史记录)。
- 历史记录仅在 WSL V2(Ubuntu 20.04)上清除;WSL V1(Ubuntu 18.04)正常工作。
- 仅当我在 ConEmu 内运行时才会清除历史记录。当我通过 powershell 运行 WSL V2 时,它运行正常。
- 即使我通过 SSH 连接到服务器,所有历史记录清除行为也完全按照上面描述的进行!(即,历史记录清除仅通过 ConEmu 在 WSL V2 上进行,并且仅当我至少拥有全屏终端历史记录时才会进行)。
- 所有上述行为都可以在终止和生成新的终端选项卡时重复执行。
- 当我尝试将字符串粘贴
xterm
到 Nano 中时,Nano 会给出错误“[ 未知序列 ]”,然后完全不响应用户输入(我必须关闭终端窗口才能退出)。粘贴其他文本(包括非常相似的字符串)则没有问题。
我不认为这是 ConEmu 的问题,因为 WSL V1 仍然有效。我不认为这是我的 bash 配置的问题,因为当我通过 SSH 进入另一台服务器时,这种情况仍然会发生。
第 7 点似乎将罪魁祸首指向了 xterm,但有什么设置可以解决这个问题呢?
答案1
更新: 对于你的“#7”项(将单词“xterm”粘贴到 nano 中),我建议打开一个针对 ConEmu 的问题,或者评论这个。 问题似乎与 Bracketed Paste 相关。在 ConEmu 中,我看到当我处于 WSL2 会话中时,Bracketed Paste 已启用(设置 -> 信息 -> 控制台状态),但当我处于 WSL1 会话中时则未启用。
似乎没有办法禁用它,但也许有。根据 ConEmu 问题,它应该在应用程序级别关闭,但根据下面的研究,这对我来说听起来不太正确。
不确定您看到的其他问题是否与此相关,但问题 #7 发生与否似乎存在很大差异。
还不确定为什么文本“xterm”会触发此问题,而不会触发其他问题。也许 ConEmu 团队也可以提供帮助。
背景研究:
那里确实有一些超级有趣的互动(这是它的技术术语)。我下载了 ConEmu(Github 发布页面的最新版本)。
我暂时只关注你问题中的第 7 点:
- 我可以重现将“xterm”粘贴到 ConEmu + WSL2 + Ubuntu 20.04 下的 Nano 中时出现的“[ 未知序列 ]”以及随后的锁定。
- 如您所见,这似乎仅适用于 Nano + ConEmu + WSL2。如果我在 ConEmu 下更改为我的 WSL1 Ubuntu 20.04 - 没问题。如果我使用相同的 WSL 实例(WSL2 Ubuntu 20.04)将“xterm”粘贴到 Windows 终端上的 nano 中 - 没问题。
- 在 ConEmu + WSL2 + Kali 下,我没有收到“[未知序列]”,但会话仍然无响应。
不过,这里有一些新信息:
- 在 WSL2 和 ConEmu 下,在提示符(
fish
对我来说是 shell)下粘贴“xterm”时,我得到以下两种结果之一。要么 (1) 在粘贴文本之前出现短暂的“闪光”(我尝试粘贴的其他任何内容都不会发生这种情况),要么 (2) “^[[201xterm”,通常在第二次和后续粘贴尝试中出现。好的一面是,fish
不会锁定。
^[[201 似乎是“括号粘贴模式”(见这里,即“CSI ? 2004 h”代码)。当然,这是一个源自 xterm 的转义序列,但这并不能解释为什么粘贴文本“xterm” 将触发它。不过,这也许可以解释为什么 Nano 会因此而受阻。