Vim在保存命令后回显当前行

时间:2014-05-07 12:15:13

标签: vim macvim

在vim中保存文件后,很快就会回显当前行,然后回显文件名和“已写入”消息。这没关系,我想这是一个正常的vim行为,但是经过一段时间处理更多文件后,一些文件多次回显当前行(在屏幕截图中看到的某些情况下最多6次)。由于此输出大于命令行高度,因此会触发提示“按ENTER或命令继续”。

vim command line after save

  1. 如何找出为什么当前行的回声在某些文件中成倍增加?
  2. 如果保存后当前行的回显对于vim不正常,是否可以合理地找出回显当前行的内容(我有相当数量的插件和配置,我想避免依次禁用每个找出哪个弄得一团糟。
  3. 如果回音由vim完成,是否可以完全禁用它?

3 个答案:

答案 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不会回显当前行。它可能是由自动命令绑定到某个事件的命令/函数。

  1. 寻找可能的自动命令:

    :verbose autocmd bufwrite,bufwritepre,bufwritepost,bufwritecmd
    :verbose autocmd filewritepre,filewritepost,filewritecmd
    :verbose autocmd fileappendpre,fileappendpost,fileappendcmd
    :verbose autocmd filterwritepre,filterwritepost
    
  2. 寻找可能的映射:

    :verbose map :w
    and so on…
    
  3. 另外,你使用syntastic吗?

答案 2 :(得分:0)

这最近开始发生在我身上,尽管当前行每次写入仅回显/打印一次,而不是多达 6 次。

通过对我的插件和 vimrc 进行二分搜索,正如 Ingo Karkat 在他的回答中所建议的,我将范围缩小到以下组合:

  • 一个插件相当于:autocmd BufWritePre * noautocmd | ...
  • 我的'shortmess'既不包含o也不包含O

我不知道为什么这个组合会导致当前行被回显/打印。但这是对 noautocmd 命令修饰符的错误使用;应该是noautocmd ...而不是noautocmd | ...