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