在vim中保存文件后,很快就会回显当前行,然后回显文件名和“已写入”消息。这没关系,我想这是一个正常的vim行为,但是经过一段时间处理更多文件后,一些文件多次回显当前行(在屏幕截图中看到的某些情况下最多6次)。由于此输出大于命令行高度,因此会触发提示“按ENTER或命令继续”。
答案 0 :(得分:2)
这不是默认的Vim行为。只有filename, 3L 42C written
消息来自:write
。
由于回显的行包含行号和突出显示,因此它看起来好像是由:print
或:number
命令生成的。
事件数量增加的事实暗示这是由某些:autocmd
重新定义引起的(没有正确清除前一个定义)。
通常,二进制搜索你禁用了一半(filetype-)插件,然后只有一半(当问题仍然存在时)或另一半(当问题出现时)消失了,让你快速找到有问题的脚本。您可以使用~/.vimrc
中的配置(通过注释掉块)来完成相同的操作。
此外,您可以使用vim -V20vimlog
捕获Vim会话的完整日志。退出Vim后,检查vimlog
日志文件中是否存在可疑命令,例如:print
,:number
或:echo[msg]
。
答案 1 :(得分:1)
不,在向磁盘写入缓冲区时,Vim不会回显当前行。它可能是由自动命令绑定到某个事件的命令/函数。
寻找可能的自动命令:
:verbose autocmd bufwrite,bufwritepre,bufwritepost,bufwritecmd
:verbose autocmd filewritepre,filewritepost,filewritecmd
:verbose autocmd fileappendpre,fileappendpost,fileappendcmd
:verbose autocmd filterwritepre,filterwritepost
寻找可能的映射:
:verbose map :w
and so on…
另外,你使用syntastic吗?
答案 2 :(得分:0)
这最近开始发生在我身上,尽管当前行每次写入仅回显/打印一次,而不是多达 6 次。
通过对我的插件和 vimrc 进行二分搜索,正如 Ingo Karkat 在他的回答中所建议的,我将范围缩小到以下组合:
autocmd BufWritePre * noautocmd | ...
'shortmess'
既不包含o
也不包含O
。我不知道为什么这个组合会导致当前行被回显/打印。但这是对 noautocmd
命令修饰符的错误使用;应该是noautocmd ...
而不是noautocmd | ...
。