在vim插入模式下从左向右移动光标时,屏幕上随机显示的字符

时间:2015-04-07 01:00:30

标签: linux vim go

我有Vim插件vim-goneocomplete,当在插入模式下从左向右移动光标时this happens

注意:这只适用于go代码和vim-go必需的二进制文件(例如gocode,godef,goimports等)。

有人有同样的问题吗?

我正在运行Ubuntu 14.04.2 LTS 64位,内核3.13.0-48 Vim 7.4.52,支持lua

提前致谢

3 个答案:

答案 0 :(得分:3)

看起来好像在使用gnome-terminal或konsole。

当您使用光标键在插入模式中移动时,键会发送转义序列。特别是,如果您碰巧按下shift或control键,那些可以发送不同的转义序列(带数字),可能用分号来分隔数字。 vim处理这种字符串有一些限制,在某些情况下(见this discussion)它会混淆并停止解释字符串,在屏幕上留下垃圾。

问题的根源在于vi,程序(mis)使用转义字符有两个不同的原因:

  • 用户发送给编辑的特殊“命令”字符
  • 大多数特殊键发送到应用程序(包括编辑器)的字符串中的第一个字符。

后者要求程序(vim)等待“一段时间”以确定使用哪种情况。如果您使用慢速机器(或慢速连接)并且您的键盘重复速度很快,则会破坏vim尝试区分这两种情况。同样,您的插件会在每次按键时将许多字符发送到屏幕上,从而使vim变慢。

由于xterm和其他终端将该信息编码为数字,因此修改的键(使用shift或control-modifiers)会加剧这种情况。 gnome-terminal和konsole使用xterm的旧版本(参见xterm FAQ How can I use shift- or control-modifiers?),这更容易被vim误认为不是转义序列。

如果只是时间问题,那么更慢地移动光标可以避免问题(同意这只是一种解决方法)。您可以通过在script中运行它来测量vim完成的输出量,以将输出捕获到 typescript 文件中。我通过更慢地将数据发送回终端来分析错误。其中一些 typescript 文件非常大,因为它们完成的工作很少。

答案 1 :(得分:0)

在我看来,您的TERM设置对您的终端来说是错误的。

如果您的TERM设置错误,您通常会以这种方式在屏幕上获得随机垃圾。

检查您的TERM环境变量。验证它是否正确设置为您正在使用的终端显示器。

答案 2 :(得分:0)

我从neocomplete更改为YouCompleteMe,随机字符不再显示。