在我所在的公司,我们登录 Windows 10,并在通过 ssh 登录会话连接的 Linux 机器上进行开发工作。直到最近,我们一直能够使用 PuTTY 来实现这一点,但现在,当权者正在删除对 PuTTY 的访问权限,并迫使我们通过其他方式连接到 Linux 主机。
此外,这些 Linux 主机上没有提供任何 X-Windows 功能,因此我们只能使用终端会话。此外,我公司的情况非常严格,我们无法安装自己的软件。我们只能选择预先批准的软件包。
我使用各种 Linux 程序,例如 vim 和 emacs,它们具有颜色功能,并且使用语法突出显示。但是,我还没有找到任何方法通过 Windows 终端程序 ssh 进入 Linux,在那里我可以让语法突出显示与这些 Linux 程序正常工作。
我尝试过 PowerShell、WindowsTerminal 和 ConEMU,但它们都无法让我在 ssh 会话期间完全控制 Linux 机器的颜色。我说的是完整的 TERM=xterm-color 功能。
有人能建议一些方法来配置 PowerShell、WindowsTerminal 或 ConEMU,让我能够像使用 PuTTY 时通过 TERM=xterm-color 那样控制 Linux 的 ssh shell 中的颜色吗?
答案1
事实证明,我的问题不是由于我通过 ssh 连接的 Linux 机器上无法识别颜色设置序列。当我通过标准 Windows ssh (OpenSSH_for_Windows_8.1p1、LibreSSL 3.0.2) 连接时,颜色工作正常。
我的问题实际上与按键识别有关。在 emacs(我通常使用)中,我将 Ctrl-Spacebar 等序列映射到某些命令,巧合的是,其中一个命令会切换语法突出显示。由于 Ctrl-Spacebar 不被接受,所以我的语法突出显示从未发生,我误以为颜色设置未被识别。
当我重新配置 emacs 以接受我将 Ctrl-Spacebar 映射到的替代序列时,我的语法高亮显示就可以完美地工作了。
显然,Ctrl-Spacebar 和我的一些其他键盘映射不是 cmd.exe、PowerShell、WindowsTerminal 和 ConEmu 中可识别的键盘序列。
我刚刚发现这个 Ctrl-Spacebar 是一个已知的错误。