是否可以在不重启的情况下应用vim配置?

80

我希望能够在Vim中编辑.vimrc文件并且不需要重新启动Vim就能应用更改。

5个回答

79

是的,在编辑你的 .vimrc 文件时,只需使用 :so % 命令即可。

如果你想让 vim 自动重新加载你的配置,你必须添加以下命令:

augroup myvimrchooks
    au!
    autocmd bufwritepost .vimrc source $MYVIMRC
augroup END

在这里对自动命令进行分组是为了避免在保存配置多次时出现“指数级”的重新加载。


请注意,此方法不适用于 gvimrc 或者如果您的文件名为 _vimrcvimrc,或者如果您编辑了另一个目录中名为 .vimrc 的文件。请查看我的答案以解决这些问题。 - Tom Hale
对我来说,它会出现像“函数Inc已经存在,请添加!以替换它”的错误。 - Hi-Angel
在这种情况下,augroup函数有什么作用?是否可以简单重写为autocmd!bufwritepost.vimrc source ~/.vimrc?即使出于某种原因需要该组,如果将第3行重写为以“autocmd!”开头,那么第2行是否可以省略? - John Karahalis

47

如果你在 Mac/Windows/Linux 平台上运行,并且使用 gvimrc,下面是一个更加跨平台兼容的版本:

augroup myvimrc
    au!
    au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif
augroup END

autocmd 监视所有潜在的 *vimrc 文件,当其中一个更改时,它会重新加载 vimrc 文件,然后再加载 gvimrc(如果 GUI 正在运行)。


5
GUI Vim启动时会设置这个。请参阅:help gvimrc - matpie
3
太棒了,谢谢。如果你能翻译这个内容,请避免我刚才犯的低级错误......我打开了gvim,在我的vimrc文件中添加了这个内容,然后尝试确认它是否有效。没有......20分钟后,我意识到在添加自动命令后我忘记了对文件进行一次源代码处理。当我完成这个步骤后,一切都很正常了。我想这对我来说可能有点太抽象了,我脑海中出现了"堆栈溢出"的情况。 - Charlie Flowers
3
我使用了这个,但也要检查$GVIMRC是否存在,因为有时它不存在。if has('gui_running') && filereadable($MYGVIMRC) - k107
起初唯一让我感到奇怪的是它仅仅是重新加载 vimrc 文件,保留已经设置好的内容。例如,如果你在 vimrc 中最初设置了“set number”,然后你注释掉了那一行并保存了文档,你仍然会在左边显示出数字。但实际上这是有意义的……如果你想要禁用某些东西,应该手动执行。 - piponazo
1
有没有任何理由不使用 au BufWritePost $MYVIMRCau BufWritePost $MYVIMRC,$MYGVIMRC - phs
显示剩余3条评论

35

加载您的vim配置文件 :source ~/.vimrc


1
在Windows上,只需键入:so ~/_vimrc - Danniel Little

8
" Quickly edit/reload this configuration file
nnoremap gev :e $MYVIMRC<CR>
nnoremap gsv :so $MYVIMRC<CR>

为了在保存后能够自动重新加载,请将以下内容添加到您的$MYVIMRC中:

if has ('autocmd') " Remain compatible with earlier versions
 augroup vimrc     " Source vim configuration upon save
    autocmd! BufWritePost $MYVIMRC source % | echom "Reloaded " . $MYVIMRC | redraw
    autocmd! BufWritePost $MYGVIMRC if has('gui_running') | so % | echom "Reloaded " . $MYGVIMRC | endif | redraw
  augroup END
endif " has autocmd

最后一次,输入:

:so %

下一次保存您的 vimrc 文件时,它将自动重新加载。 特性:
  • 向用户说明发生了什么(同时记录到 :messages
  • 处理各种配置文件的名称
  • 确保只匹配实际的配置文件(忽略其他目录中的副本或 fugitive:// 差异)
  • 如果使用 vim-tiny,不会生成错误
当然,只有在 vim 中编辑您的 vimrc 才会自动重新加载。

只有当所有文件都在我编辑的 $MYVIMRC 的同一实例中打开时,它似乎才能工作。如果它们在不同的终端中,例如,那么我仍然必须手动来源 $MYVIMRC。有没有办法解决这个问题? - Zoey Hewll
1
据我所知没有 - 这个功能是通过捕获当前 vim 写出文件时触发的。也许可以监控文件本身的 mtime,但不确定如何在异步轮询时实现。 - Tom Hale

1

autocmd! bufwritepost _vimrc source %

这将在保存时自动重新加载 _vimrc 文件中的所有配置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接