仅执行一次自动命令

时间:2011-01-01 03:41:02

标签: vim

我在Windows上使用GVim时遇到问题。我在.vimrc中设置了以下内容:

if has("gui_running")
  autocmd VIMEnter * :source C:/session.vim
endif

不幸的是,这会产生问题。如果我是文件的顶部并尝试向上移动一行(k),则屏幕会闪烁。如果我拿着钥匙只持续一秒钟就会闪了几十次,看起来真的很讨厌。

我尝试使用GUIEnter,但我得到了相同的结果。文档提到我只能触发一次自动命令,但我无法弄清楚确切的语法。关心帮忙?

3 个答案:

答案 0 :(得分:1)

我假设如果你在自动命令中调用的任何命令中清除它,你只能获得一次自动命令。例如,在示例代码中,如果c:/session.vim包含此命令,则只会触发一次:

autocmd! VimEnter *

就像frabjous在他的评论中所说的那样,听起来你的问题就是视觉钟声问题,请参阅:h visualbell

答案 1 :(得分:1)

我有一个专门用于此的功能:lh#event#register_for_one_execution_at()。这个想法确实是在执行后清除事件。

但我也怀疑另一个问题。 Vimenter不是那种多次被触发的事件。

答案 2 :(得分:0)

如同提到的那样,我不得不关闭视觉铃声。但是,文档提到GUI启动时,visualbell会重置为默认值。将“set vb t_vb =”放在.vimrc的顶部以禁用可视铃声将不起作用,因为它在进入GUI时被重置。相反,诀窍是使用自动命令禁用可视铃声:

autocmd GUIEnter * :set vb t_vb=