我有Vim插件vim-go和neocomplete,当在插入模式下从左向右移动光标时this happens
注意:这只适用于go代码和vim-go必需的二进制文件(例如gocode,godef,goimports等)。
有人有同样的问题吗?我正在运行Ubuntu 14.04.2 LTS 64位,内核3.13.0-48 Vim 7.4.52,支持lua
提前致谢
答案 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,随机字符不再显示。