在应用程序之间按 Alt+Tab 时发送到 ssh 终端的奇怪字符

在应用程序之间按 Alt+Tab 时发送到 ssh 终端的奇怪字符

SSH到我的 AWS EC2 机器亚马逊Linux来自本地乌班图GNOME 终端。如果打开维姆在里面SSH会话,然后Alt+Tab从终端到另一个应用程序,然后Alt+Tab返回,出现烦人的消息:E349: No identifier under cursorPress ENTER or type command to continue。经过一番挖掘,我找到了原因:奇怪的字符被发送到SSH终端当我 Alt+Tab 时:

[ec2-user@ip-172-31-43-121 ~]$ cat
^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I

^[[O^[[I每单Alt+ Tab.这些字符是什么意思?为什么会发送它们以及如何防止它们发生?

编辑:通过重新启动 GNOME 终端修复。

答案1

这是发送 xterm 的终端焦点内/焦点外逃脱。 vim 将终端设置为一种模式,让它知道光标何时离开窗口(当使用 alt-tab 键切换时)。

你会防止通过更改 vim 中用于处理鼠标的模式来实现。检查 xterm 的文档,vim 必须发送带有1004参数的特定转义序列(以告诉 xterm 发送这些转义),但我在 vim 中没有看到这一点源代码。其他一些终端可能会这样做,作为鼠标移动模式的副作用1003(vim 确实发送):

    if (xterm_mouse_vers > 0) 
    { 
        if (on) // 启用鼠标事件,如果可用则使用鼠标跟踪
            out_str_nf((char_u *) 
               (xterm_mouse_vers > 1 
            ? ( 
#ifdef FEAT_BEVAL_TERM 
                bevalterm_ison 
                   ? IF_EB("\033[?1003h", ESC_STR) "[?1003h") : 
#endif 
                  IF_EB("\033[?1002h", ESC_STR "[?1002h")) 
            : IF_EB("\033[?1000h", ESC_STR "[?1000h"))); 
        else // 禁用鼠标事件,可能总是发送相同的
            out_str_nf((char_u *) 
                   (xterm_mouse_vers > 1 
                ? IF_EB("\033[?1002l", ESC_STR "[?1002l") 
                : IF_EB("\033[?1000l ") ", ESC_STR "[?1000l"))); 
        mouse_ison = 开;
    }

您可能应该查阅您正在使用的终端的用户手册,以了解 vim 的预期行为。

相关内容