Conemu + SSH 清除控制台历史记录



我正在使用 ConEmu,并且对它非常满意,除了如果我使用 PuTTY 进行 SSH 访问,我可以在远程机器上运行命令,如 vim 或 nano 或 mcedit 或其他打开某种诅咒界面的命令,我可以看到控制台命令历史记录,但是当我使用 CygWin SSH 客户端或 OpenSSH for Windows 时,我在运行 vim/后无法再看到命令历史记录/纳米/麦克迪特/别的什么。

当我退出这些程序时(vim 中的 wq,mcedit 中的 Esc 键,nano 中的 Ctrl^X(,我可以看到之前执行的所有命令,如下所示(如果我使用 PuTTY(:

  1. 运行 PuTTY 并连接到某个主机
  2. 你会在历史上看到类似的东西:
    主机$ 哇哇
    用户
    主机$ vim
    ...在 vim 中做一些事情,然后按 :wq

你应该看到这个:

=== 切割 ===
主机$ 哇哇
用户
主机$ vim
主机$
=== 切割 ===

所有以前的命令(Whoami(都是可见的。但是,如果我运行ConEmu,然后使用来自CygWin的SSH客户端(或OpenSSH客户端,没关系(,则会发生以下情况:

  1. 润鸸鹋
  2. ssh user@somehost主机$ 哇哇
    用户
    主机$ vim
    ...在 vim 中做一些事情,然后按 :wq

现在屏幕是空的!没有历史!你只看到这个:

=== 切割 ===
主机$
=== 切割 ===

好像没有被处决。mcedit,nano或任何其他具有"屏幕"之类的程序也会发生同样的情况。Midnight Commander中的Ctrl-O也发生了同样的情况,在PuTTY中一切都很好,但是当在ConEmu(或OpenSSH Windows客户端(中使用来自CygWin的ssh并运行Midnight Commander时,每个Ctrl-O只显示一个空的历史记录。好像以前什么都没输入。这真的一点也不好。

有什么办法可以解决这个问题吗?

PuTTY.exe的标准TERM环境变量是xterm的,这也适用于Cygwin ssh.exe。 但是,对于ssh.exe,更好的TERM环境变量是 cygwin

当你使用Cygwin

ssh.exe连接到另一个系统时,Cygwin处理你的转义序列,而不是ConEmu。 事实上,无论您是在ConEmu内部还是外部运行ssh.exe,您都会获得相同的行为。 所以这个问题与ConEmu完全无关,至少与它的ANSI处理器无关。

解决方案是将cygwin用于远程系统上的TERM环境变量。 实际上,SSH客户端和服务器会自动合作为您执行此操作。 但也许您不小心用.bash_profile中的xterm或其他任何东西覆盖了提供的 TERM 变量。 在这种情况下,退出编辑器后还原屏幕缓冲区的转义序列对于 Cygwin ANSI 处理器来说将不正确。

您可以执行此测试以检查这是否解决了您的问题:

$ export TERM=xterm
$ vim
$ # the screen before is cleared
$ export TERM=cygwin
$ vim
$ # the screen buffer is restored

最新更新