在 vim 插入模式下从左向右移动光标时随机出现在屏幕上的字符
characters randomly showing up on screen when move the cursor from left to right in vim insert mode
我有 Vim 插件 vim-go and neocomplete, when o move the cursor from left to right in insert mode this happens
注意:这只发生在 go 代码和 vim-go 所需的二进制文件(例如 gocode、godef、goimports 等)
有人遇到同样的问题吗?
我是 运行 Ubuntu 14.04.2 LTS 64 位内核 3.13.0-48 Vim 7.4.52 lua 支持
提前致谢
看起来您正在使用 gnome-terminal 或 konsole。
当您在插入模式下使用光标键移动时,这些键会发送转义序列。特别是,如果您碰巧按下 shift 或 control 键,它们可以发送不同的转义序列(带有数字),可能用分号分隔数字。 vim 处理这类字符串有一些限制,在某些情况下(参见 this discussion)它会变得混乱并停止解释字符串,在屏幕上留下垃圾。
问题的根源在于,在 vi
中,程序(错误)使用转义符有两个不同的原因:
- 用户发送给编辑器的特殊"command"字符
- 大多数特殊键发送给应用程序(包括编辑器)的字符串中的第一个字符。
后者需要程序(vim)等待"a while"确定使用哪种情况。如果您使用的机器(或连接速度慢)而您的键盘重复速度很快,那么 vim 区分这两种情况的尝试就失败了。同样,您的插件会在每次击键时向屏幕发送许多 个字符,从而使vim 变慢。
由于 xterm 和其他终端将该信息编码为数字,因此 modified 键(使用 shift 或 control 修饰符)加剧了这种情况。 gnome-terminal 和 konsole 使用 xterm 的旧变体(参见 xterm FAQ How can I use shift- or control-modifiers?),这更容易被 vim 误认为不是转义序列。
如果只是时间问题,那么将光标移动得慢一点就可以避免这个问题(同意这只是一种解决方法)。您可以通过 运行 在 script
中衡量 vim 完成的输出量,以将输出捕获到 typescript 文件中。我这样做是为了分析错误,通过更慢地将数据发送回终端。其中一些 typescript 文件非常大,因为完成的工作很少。
我从neocomplete改成YouCompleteMe,随机字符不显示了。
我有 Vim 插件 vim-go and neocomplete, when o move the cursor from left to right in insert mode this happens
注意:这只发生在 go 代码和 vim-go 所需的二进制文件(例如 gocode、godef、goimports 等)
有人遇到同样的问题吗?
我是 运行 Ubuntu 14.04.2 LTS 64 位内核 3.13.0-48 Vim 7.4.52 lua 支持
提前致谢
看起来您正在使用 gnome-terminal 或 konsole。
当您在插入模式下使用光标键移动时,这些键会发送转义序列。特别是,如果您碰巧按下 shift 或 control 键,它们可以发送不同的转义序列(带有数字),可能用分号分隔数字。 vim 处理这类字符串有一些限制,在某些情况下(参见 this discussion)它会变得混乱并停止解释字符串,在屏幕上留下垃圾。
问题的根源在于,在 vi
中,程序(错误)使用转义符有两个不同的原因:
- 用户发送给编辑器的特殊"command"字符
- 大多数特殊键发送给应用程序(包括编辑器)的字符串中的第一个字符。
后者需要程序(vim)等待"a while"确定使用哪种情况。如果您使用的机器(或连接速度慢)而您的键盘重复速度很快,那么 vim 区分这两种情况的尝试就失败了。同样,您的插件会在每次击键时向屏幕发送许多 个字符,从而使vim 变慢。
由于 xterm 和其他终端将该信息编码为数字,因此 modified 键(使用 shift 或 control 修饰符)加剧了这种情况。 gnome-terminal 和 konsole 使用 xterm 的旧变体(参见 xterm FAQ How can I use shift- or control-modifiers?),这更容易被 vim 误认为不是转义序列。
如果只是时间问题,那么将光标移动得慢一点就可以避免这个问题(同意这只是一种解决方法)。您可以通过 运行 在 script
中衡量 vim 完成的输出量,以将输出捕获到 typescript 文件中。我这样做是为了分析错误,通过更慢地将数据发送回终端。其中一些 typescript 文件非常大,因为完成的工作很少。
我从neocomplete改成YouCompleteMe,随机字符不显示了。