4

我正在使用 ConEmu 并且对它非常满意,除了如果我使用 PuTTY 进行 SSH 访问,我可以在远程机器上运行命令,如 vim 或 nano 或 mcedit 或其他打开某种诅咒接口的命令和我可以看到控制台命令历史记录,但是当我使用 CygWin SSH 客户端或 Windows 的 OpenSSH 时,我在运行 vim/nano/mcedit/whatever 之后再也看不到命令​​历史记录。

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

  1. 运行 PuTTY 并连接到某个主机
  2. 您将在历史记录中看到类似的内容:
    host$ whoami
    user
    host$ vim
    ...do something in 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 只显示一个空的历史记录。好像之前没有输入任何内容一样。这真的一点都不好。

有没有办法解决这个问题?

4

1 回答 1

2

is的标准TERM环境变量也将主要适用于Cygwin。但是,更好的环境变量是.PuTTY.exexterm ssh.exeTERMssh.execygwin

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

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

你可以做这个测试来检查这是否能解决你的问题:

$ export TERM=xterm
$ vim
$ # the screen before is cleared
$ export TERM=cygwin
$ vim
$ # the screen buffer is restored
于 2013-12-22T06:56:40.813 回答