多年来,由于Vim扔掉输入字符的行为,我被逼疯了。我开始时是这样的:
$ vim file.c然后立即开始键入命令。然而,Vim放弃了其中的一些字符,导致错误的操作发生。
我们在.vimrc中有什么可以解决这个问题的吗?
Vim应该能够在不刷新缓冲输入的情况下将TTY更改为raw模式。
更新:由于采用了以下调查方法,这一问题的特点更加明确。我创建了一个名为delayvim的脚本,其中包含:
#!/bin/sh
sleep 2.0
vim "$@"现在,在这两秒钟的暂停中,我可以输入类似iabc<ESC>的内容,然后当Vim出现时,一切都很酷:命令被处理,abc被插入,Vim弹回命令模式,光标被备份在c上。因此,并不是简单地刷新TTY输入缓冲区。
然而,,,如果我在此延迟期间继续输入,例如iabcdefghijk...,它有时会丢失大约在sleep终止和编辑器启动时输入的一个或两个字母。例如,下面是我刚才进行的一次试验的结果:
abcdefghilmn_
~
~jk在哪里,哎呀?我肯定是我打的。我打字速度不是很快,我的节奏是每秒4-5次,但连续两次都消失了。
基本上,它可能试图询问终端,并在过程中丢弃在响应中混在一起的输入。或者是读取一些先前的输入,然后刷新输入缓冲区,然后丢失其余的。
发布于 2017-06-13 22:05:16
有两点可能会有所帮助:
1)您是否一定要先按i键,进入输入模式,以便以后输入的所有字符都可以显示在缓冲区中(在屏幕上)。否则,您输入的字母将被处理为命令,这通常不会起任何作用,特别是当您启动一个空文件时。
请注意,a和o是告诉vim您即将开始插入文本的其他常用命令,从下一个击键开始。
2)如果您的系统上的原因与速度有关,您可以寻找选项来改变启动时发生的事情。例如,如果将其放入.vimrc文件中
autocmd VimEnter *:睡眠5
然后,在处理其他启动文件之后,vim或gvim将在屏幕上显示您的文件之前,在5秒内不做任何事情。在我的系统中,我能够在这5秒内输入iabcdef,当时间结束时,我确实看到abcdef输入了我的文本文件。
如果您的文件不是空的,请注意,因为(取决于您的设置),您的vim安装可能会将您返回到您在文件中编辑的最后一个位置,并且您将在文件中插入文本,而不是在开始时插入文本。
如果这不起作用,您可以尝试找到vim可以做的其他事情(在web上,或者使用:help it vim),并在启动时使用autocmd对其进行编程,看看它是否有用。
https://stackoverflow.com/questions/44531344
复制相似问题