【问题标题】:How to correctly reload .vimrc file so it will be equal to restart of vim?如何正确重新加载 .vimrc 文件,使其等于重新启动 vim?
【发布时间】:2017-03-16 18:59:08
【问题描述】:

我使用 MacVim,在我的 .vimrc 文件中我有 map ,V :source $MYVIMRC<CR> 绑定,允许我在最近修改的情况下应用最新版本的 .vimrc。 但是我注意到可能会发生奇怪的事情,重新启动可能会减慢 vim,并且在按下 ,V 后,某些插件可能会开始发生冲突,如果我只是关闭并从头开始重新启动 MacVim,一切正常。

如果你能给我一个关于这种行为原因的提示,我将非常感激,因为我希望有可能更新 .vimrc 文件,这将完全清除内部 vim 状态并获取新的配置文件

【问题讨论】:

  • “完全清除内部 vim 状态并获取新配置文件”的唯一方法是启动另一个 Vim 实例。至于速度变慢,一个可能(也是非常常见)的原因是自动命令使用不当,但如果没有看到您的vimrc 就很难诊断。
  • 在组外定义且没有:au! 的自动命令确实是一个很好的减速原因。
  • 谢谢,@romainl。确实,自动命令导致了延迟。现在我看到完全重启和一个新实例是重置内部状态的唯一方法。也许您应该将您的评论添加为答案,以便我可以将其标记为该问题的解决方案

标签: vim macvim


【解决方案1】:

将配置重新应用到原始 Vim 的唯一可行方法实际上是重新启动它。

但最可能导致速度变慢的原因是过度使用/误用自动命令。

在不检查现有命令的情况下添加自动命令。一个后果是,如果您没有正确管理它们,它们往往会堆积起来,并且与特定事件相对应的每个单独的自动命令都会在该事件被触发时执行,从而导致可怕的减速。

以下是您应该在vimrc 中使用自动命令的两种方式:

方法#1

" anywhere
augroup nameofthegroup
    autocmd!
    autocmd EventName pattern commandtoexecute
    autocmd AnotherEventName anotherpattern anothercommandtoexecute
augroup END

方法#2

" near the top of your vimrc
augroup nameofthegroup
    autocmd!
augroup END

" anywhere
autocmd nameofthegroup EventName pattern commandtoexecute
autocmd nameofthegroup AnotherEventName anotherpattern anothercommandtoexecute

这个想法是创建一组自动命令,在调用时自动清除,从而防止它们堆积。

【讨论】:

  • 将整个 vimrc 放在一个组中是个好主意吗?为什么 vim 默认不会在内部 wrap vimrc 在自动组中?
  • 所有内容都在一个全局组中,包括您的vimrc。默认情况下,所有自动命令都被不加选择地添加到该全局组中这一事实正是为什么在处理自动命令的方式上更细粒度通常很有用。
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 2013-11-18
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多