我SSH到我的 AWS EC2 机器亚马逊Linux来自本地乌班图和GNOME 终端。如果打开维姆在里面SSH会话,然后Alt+Tab从终端到另一个应用程序,然后Alt+Tab返回,出现烦人的消息:E349: No identifier under cursor
或Press 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 的预期行为。