在Vim中编辑并使用XTERM时,将字母g添加到行首(来自Windows的Cygwin mintty)

vi4fp9gy  于 4个月前  发布在  Windows
关注(0)|答案(1)|浏览(46)

当在Windows上使用XTERM终端到Linux主机上时,当第一次打开一个要用Vim编辑的文件时,会在行的开头添加一个字母g。
这个bug与xterm将终端颜色传递到Vim有关,但vim最终试图读取“rgb”,并最终运行“:rg”,它在启动时将行首替换为字母g
在我的情况下,我使用Cygwin薄荷设置使用终端XTERM。
搜索一下,我发现这是XTERM和Vim之间的一个bug,一些网站提到这是一个透明bug,在.vimrc中设置“set background=dark”可以解决这个问题。这确实解决了我在RHEL 7 Linux主机上VIM 7.4上的问题。然而,最近,我开始使用RHEL9主机与Vim 8.2和“设置背景=黑暗”不再工作,我仍然会得到字母g的自动插入。在尝试了一堆东西,我终于发现在.vimrc中使用“set compatible”可以解决这个问题,我必须这样做的原因是VIM 8.X不再像VIM 7.X那样默认启用vi兼容。
其他人有类似的问题,你用另一种方式解决了吗?
我会失去任何重要的使用“设置兼容”?似乎像箭头键,块文本等仍然都工作。

hfsqlsce

hfsqlsce1#

浏览:help 'compatible'并做了更多的实验,似乎失去了escape键对我的影响最大。当你在插入模式下时,你不能再使用箭头键来移动。我测试了一下,如果我把set compatible拿出来,只设置noesckeys,“g”bug不会发生。所以那些escape键似乎与bug有关。
作为一个超级黑客的解决方法,我尝试使用一个autocmd,它异步等待100 ms,然后在启动Vim后用:e!重新加载文件(基本上是颠倒插入的字母g),这样做的技巧,并留下我所有的xterm功能的地方,但删除文件似乎矫枉过正,所以我找到了一个全局撤销功能,我可以在Vim 8.1+使用所以我使用:u0来撤消所有更改,而不是:e!文件重新加载。
下面是我最终添加到.vimrc的auto命令:

" upon opening the vim file, wait 100ms asynchronously and then undo all changes using :u0.  This is available in VIM 8.1+.  This gets rid of the letter g entry from the xterm/vim bug
autocmd VimEnter * call timer_start(100, { tid -> execute(':u0')})

字符串

相关问题