【问题标题】:conemu + ssh clears console historyconemu + ssh 清除控制台历史记录
【发布时间】:2013-10-06 10:11:57
【问题描述】:

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

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

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

你应该看到这个:

=== 剪辑 ===
主持人$ whoami
用户
主机$ vim
主机$
=== 剪辑 ===

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

  1. 运行 ConEmu
  2. ssh 用户@somehost 主持人$ whoami
    用户
    主机$ vim
    ...在 vim 中做一些事情然后按 :wq

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

=== 剪辑 ===
主机$
=== 剪辑 ===

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

有什么办法可以解决吗?

【问题讨论】:

    标签: ssh conemu


    【解决方案1】:

    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
    

    【讨论】:

    • 当我通过 SSH 连接到运行 Ubuntu 的 EC2 服务器时,这对我不起作用:export TERM=cygwin ➜ ~ zle-line-init:echoti:1: no such terminfo capability: smkx
    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 2016-01-13
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多