conemu + ssh 清除控制台历史记录

use*_*463 5 ssh conemu

我正在使用 ConEmu,并且对它完全满意,除了以下事实:如果我使用 PuTTY 进行 SSH 访问,那么我可以在远程计算机上运行命令,例如 vim 或 nano 或 mcedit 或其他打开某种诅咒界面的命令,并且我可以看到控制台命令历史记录,但是当我使用 CygWin SSH 客户端或 OpenSSH for Windows 时,运行 vim/nano/mcedit/其他命令后我无法再看到命令历史记录。

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

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

你应该看到这个:

=== 剪切 ===
主机$ whoami
用户
主机$ vim
主机$
=== 剪切 ===

所有以前的命令(whoami)都是可见的。但是,如果我运行 ConEmu,然后使用 CygWin 中的 SSH 客户端(或 OpenSSH 客户端,这并不重要),则会发生以下情况:

  1. 运行ConEmu
  2. ssh user@somehost host$ whoami
    user
    host$ vim
    ...在 vim 中执行某些操作,然后按 :wq

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

=== 剪切 ===
主机$
=== 剪切 ===

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

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

Ric*_*key 2

标准TERM环境变量PuTTY.exeis xterm,它也主要适用于Cygwin ssh.exe。然而,更好的TERM环境变量ssh.execygwin.

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

解决方案是使用远程系统上的环境变量cygwinTERM事实上,SSH客户端和服务器会合作自动为您完成此操作。但也许您不小心TERMxterm您的.bash_profile或其他内容覆盖了提供的变量。在这种情况下,退出编辑器后恢复屏幕缓冲区的转义序列对于Cygwin ANSI 处理器来说将不正确。

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

$ export TERM=xterm
$ vim
$ # the screen before is cleared
$ export TERM=cygwin
$ vim
$ # the screen buffer is restored
Run Code Online (Sandbox Code Playgroud)