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

问题描述 投票:0回答:1

在 Linux 主机上使用 Windows 上的 XTERM 终端首次打开要使用 VIM 编辑的文件时,神秘的字母 g 会被添加到行首。

该错误与 xterm 将终端颜色传递到 vim 有关,但 vim 最终尝试读取“rgb”并最终运行“:rg”,它在启动时用字母 g 替换行的开头

在我的例子中,我使用 Cygwin mintty 设置为使用终端 XTERM。

搜索了一下,我发现这是 XTERM 和 VIM 之间的一个错误,一些网站提到这是一个透明度错误,在 .vimrc 中添加“set background=dark”可以解决这个问题。这确实解决了我在 RHEL7 Linux 主机上的 VIM 7.4 上的问题。然而,最近我开始使用带有 VIM 8.2 的 RHEL9 主机,“set background=dark”不再起作用,我仍然会自动插入字母 g。在尝试了很多事情之后,我终于发现在 .vimrc 中使用“set compatable”可以解决这个问题,我必须这样做的原因是 VIM 8.X 不再像 VIM 中那样默认启用 vi 兼容7.X.

还有其他人遇到类似的问题吗?您通过其他方式解决了这个问题吗?

使用“设置兼容”我会丢失任何重要的东西吗?看起来箭头键、块文本等仍然有效。

vim cygwin mintty
1个回答
0
投票

更新: 查看兼容列表并进行更多尝试,似乎丢失转义键对我来说是最大的影响。当您处于插入模式时,您不能再使用箭头键来移动。我测试了一下,看看如果我取消设置兼容并只设置 noesckeys 并且“g”错误不会发生,会发生什么。所以这些转义键似乎与该错误有关。

作为一个超级 hacky 解决方法,我尝试使用 autocmd,异步等待 100 毫秒,然后使用 :e! 重新加载文件。启动 vim 后(基本上反转插入的字母 g),这就完成了,并保留了我所有的 xterm 功能。重新加载文件似乎有些过头了,所以我发现了一个可以在 VIM 8.1+ 中使用的全局撤消功能,所以我使用 :u0 来撤消所有更改,而不是 :e!文件重新加载。

这是我添加到 .vimrc 的自动命令:

打开 vim 文件时,异步等待 100 毫秒,然后使用 :u0 撤消所有更改。这在 VIM 8.1+ 中可用。这消除了 xterm/vim bug 中的字母 g 条目 autocmd VimEnter * 调用timer_start(100, { tid ->execute(':u0')})

© www.soinside.com 2019 - 2024. All rights reserved.