我多年来一直在 KDE 桌面上使用 xterm,在一个又一个的 Debian/Ubuntu/Arbian 版本上使用。我使用焦点跟随鼠标桌面设置,并在 .vimrc 中使用“:set mouse=a”。最近的版本引入了一个我不知道如何追踪的不当行为。似乎发生了 Debian 10->11,Buster->Bullseye。
当 vim 处于输入模式时,当我将光标移出 vim 正在运行的 xterm(窗口失去焦点)时,会发出一声蜂鸣声,vim 切换到命令模式,就像有人在该窗口中按了 esc 一样。旧的行为是安静地等待,直到焦点重新回到 vi 窗口上,这样我就可以粘贴到另一个窗口复制的任何内容。
桌面上的gvim则没有这个问题。
它发生在旧的(buster)桌面上,通过 ssh 与新(Bullseye)系统上的 shell+vim 进行通信。
这里发生了什么?新的外壳是否传递了它用来捕获的信号?如何追踪?
答案1
尝试将以下行添加到您的 vimrc 中。 (更多信息::help xterm-focus-event
)
set t_fd= t_fe=
Vim 8.2.2345 添加了对 xterm focus 事件的支持,默认情况下启用。
https://github.com/vim/vim/commit/681fc3fa782e99fe69ed2c83c3e29109d2d61e1a
在我的环境中,当启用这个新设置并且在插入模式下存在到 esc 的映射时,当窗口失去焦点时,vim 会切换到命令模式,就像我按下了 esc 一样。
(我不确定这是一个错误还是一个规范。)
答案2
事实证明,问题出现在 Debian 的 vim-tiny 软件包中的“vi”中,但 vim-basic 或 vim-gtk 中的“vi”中则没有。原因是 vim-tiny 安装的 /etc/vim/vimrc.tiny 中的“set兼容”行未注释掉。其他的只安装/etc/vim/vimrc。这解释了我的安装之间的行为差异。
显然,vim-tiny 中的“vi”请求来自终端的焦点更改通知,但不知道如何处理它们。使用另一个名称“vim”从同一包调用同一程序,并且不会显示问题。
最快的修复方法是在 /etc/vim/vimrc.tiny 中将“设置兼容”更改为“设置不兼容”。
一夜之间,我在 Raspberry Pi 论坛上得到了三个很好的答案。