【问题标题】:Why vim doesn't work correctly into a telnet session?为什么 vim 在 telnet 会话中不能正常工作?
【发布时间】:2010-09-20 05:38:49
【问题描述】:

我在 OpenVMS V7.3-2 上使用 vim (7.1)。

我通过终端仿真器 SmartTerm 的 telnet 会话连接到 VMS。

效果很好。

但是当我从一个 VMS 会话(通过 SmartTerm 连接)启动一个 telnet 会话到另一个 VMS 会话时,某些键无法正常工作。

|--------------| telnet   |-------------| telnet   |-----------------|
|  Smartterm   | ------>  | VMS, Vim OK | ------>  | VMS, Vim broken |
|--------------|          |-------------|          |-----------------|

Insert、Delete、Home、End、PageUp 和 PageDown 在正常模式下类似于 ~(大写到小写,反之亦然)

有什么想法吗?

==============================================

编辑

我刚刚意识到我没有提到第二个远程登录会话在同一个 VMS 机器上。

我这样做是因为我需要使用其他用户的权限来做某事。

【问题讨论】:

  • 您说“但是当我从 VMS 会话启动 telnet 会话时,某些键无法正常工作。”这是否意味着:您在 Windows 上启动 SmartTerm,连接到 VMS,然后在其他地方远程登录,然后运行 ​​vim? Telnet 到什么样的系统?

标签: vim telnet escaping terminal-emulator vms


【解决方案1】:

通常这是因为终端仿真 - 所以有些东西没有通过正确的键。自从我这样做以来已经有很长时间了,但是寻找像 VT-100 之类的东西。我怀疑它是特定于 vim 的:)

很抱歉,我不能提供更多帮助。

【讨论】:

    【解决方案2】:

    除了调整所使用的终端仿真之外,学习 vim 的键击以执行您尝试执行的操作也是一个好主意。这些更可靠,不依赖于终端或键盘。例如:

    • 插入:我
    • 首页:^ 转到第一个非空白字符,0 始终转到第一列
    • 结束:$
    • PageUp, PageDown: ctrl-u, ctrl-d 一次移动半页

    【讨论】:

    • 同意 :-) 但是坏习惯很难忘记。谢谢
    • ^ 和 $ 在插入模式下不起作用......但 Home 和 End 可以。必须按 esc,$,i 的工作量是按 End 的三倍。箭头键也一样,在插入模式下不能使用 hjkl。
    • 对大多数用户来说都不是问题,因为你应该改变你的习惯,这样你在插入模式下所做的唯一事情就是,你知道,插入。
    • ctrl-f/ctrl-b 一次移动整页。 Ctrl-u/d 实际上可以做不同的事情,这取决于“滚动”的设置(默认为 1/2 页)。哦,认为这是改掉坏习惯的绝佳理由。
    【解决方案3】:

    要问的第一个问题很简单:你坐在什么前面?您真的在运行 OpenVMS 的 VAX 或 Alpha 控制台上吗?我的猜测是答案是否定的。

    万一答案是肯定的,只需输入:

    $ 显示终端

    并确保远程 UNIX 主机上的 TERM 变量与此完全匹配。

    如果我的猜测是正确的,并且您正坐在运行某种终端仿真器(如 PuTTY 或 Terminal)的 PC 或 Mac 前,那么您需要探索您的软件选项以确保它所仿真的终端得到正确反映在 VMS 系统的世界观和远程 UNIX 主机的世界观中。

    确定要模拟的终端类型后,在您连接的 VMS 系统上再次使用上述 VMS 命令以确保匹配。

    如果没有,只需键入以下内容来纠正这种情况:

    $ SET TERMINAL/DEVICE=(您的终端名称 - 例如 vt100)

    然后确保远程 unix 主机上的 TERM 与 VMS 系统设置的匹配。

    完成所有这些后,一切都会正常。

    【讨论】:

    • 我正在使用 Window 应用程序 SmarTerm 连接到 Alpha。这里没有 Unix。当我输入 SHOW TERMINAL 时,telneted session 和普通 session 没有区别,除了“Remote Port Info: Host”和“Owner”一个遥控器是我的电脑,另一个是 Alpha。
    • 仍然涉及终端仿真。我不知道 SmarTerm 使用的是什么仿真,也不知道第二个 VMS 盒子认为你有什么终端,但两者显然不同意。
    • 执行 SET TERM/INQUIRE,主机将询问终端模拟器它是什么并将终端设置为该类型。此时,SHOW TERM 将告诉您终端仿真器声称是什么。
    【解决方案4】:

    我在复活一个满是灰尘的旧 Solaris 盒子时遇到了类似的问题。我懒得去寻找我应该如何正确设置我的t_... 变量,所以我重新映射了错误的终端转义序列:

    :map xxx 0          (press <C-v><Home> in place of xxx)
    :map xxx <C-b>      (press <C-v><PgUp> in place of xxx)
    ... etc
    

    如果你想正确设置这该死的东西,RTFMing 可能会消耗一些勇气和时间:

    :h terminal-options
    

    【讨论】:

      【解决方案5】:

      除了如何在终端设备兼容性上设置env变量之外,关于telnet客户端本身的提示可能会有用:

      在通常的 Esc 组合之前使用 Ctrl+[,例如退出vim

      Ctrl+[ Esc :q!
      

      【讨论】:

        猜你喜欢
        • 2020-12-07
        • 2016-07-16
        • 2019-01-04
        • 2020-09-03
        • 2016-10-10
        • 2016-10-24
        • 2017-02-27
        • 2017-07-08
        • 2014-11-23
        相关资源
        最近更新 更多