我正在使用ConEmu并且对它完全满意,除非我使用PuTTY进行SSH访问,然后我可以在远程机器上运行命令,如vim或nano或mcedit或其他打开某种诅咒的命令-interface我可以看到控制台命令的历史记录,但是当我使用CygWin SSH客户端或OpenSSH for Windows时,我无法在运行vim / nano / mcedit /其他任何内容后看到命令历史记录。
当我退出这些程序时(:vim中的wq,mced中的Esc键,nano中的Ctrl ^ X)我可以看到所有以前执行的命令,如下所示(如果我使用PuTTY):
你应该看到这个:
===削减===
主持人$ whoami
用户
主持人$ vim
主持人$
===削减===
所有以前的命令(whoami)都是可见的。但是,如果我运行ConEmu然后使用来自CygWin(或OpenSSH客户端,无关紧要)的SSH客户端,则会发生以下情况:
现在屏幕是空的!没有历史!你只看到这个:
===削减===
主持人$
===削减===
好像没有执行过whoami。同样适用于mcedit,nano或任何其他类似“屏幕”的程序。 Midnight Commander中的Ctrl-O也是如此,在PuTTY中一切都很好,但是当在ConEmu(或OpenSSH Windows客户端)中使用CygWin的ssh并运行Midnight Commander时,每个Ctrl-O只显示一个空的历史记录。好像之前没有输入任何内容。这真的不太好。
有没有办法解决这个问题?
答案 0 :(得分:2)
TERM
的标准PuTTY.exe
环境变量为xterm
,并且主要适用于 Cygwin ssh.exe
。但是,TERM
更好的ssh.exe
环境变量为cygwin
。
当您使用 Cygwin ssh.exe
连接到另一个系统时, Cygwin 会处理您的转义序列,而不是 ConEmu 。事实上,无论您是在 ConEmu 内部还是外部运行ssh.exe
,您都会遇到相同的行为。所以这个问题与 ConEmu 根本没有关系,至少不是它的ANSI处理器。
解决方案是使用cygwin
作为远程系统上的TERM
环境变量。实际上, SSH 客户端和服务器会自动配合为您执行此操作。但也许您在TERM
或其他任何情况下意外地覆盖了提供的xterm
变量,并说.bash_profile
。在这种情况下,退出编辑器后恢复屏幕缓冲区的转义序列对于 Cygwin ANSI处理器将不正确。
您可以执行此测试以检查这是否可以解决您的问题:
$ export TERM=xterm
$ vim
$ # the screen before is cleared
$ export TERM=cygwin
$ vim
$ # the screen buffer is restored