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


80

我想.vimrc从Vim编辑文件并应用它们而不重启Vim。

Answers:


80

是的,只需:so %在编辑.vimrc时使用命令。

如果要让vim自动重载配置,则必须添加以下命令:

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

如果您保存了多次配置,此处的自动命令分组可以避免“指数”重载。


请注意,这不适用于,gvimrc或者如果您的文件名为_vimrcvimrc,或者您编辑了.vimrc另一个目录中的文件,则无法使用。请参阅我的答案以解决这些问题。
汤姆·黑尔

对我来说,它会失败,并出现类似的错误Function Inc already exist, add ! to replace it
Hi-Angel

在这种情况下,augroup发挥什么作用?难道不能简单地改写autocmd! bufwritepost .vimrc source ~/.vimrc吗?即使出于某种原因需要该组,如果将第3行改写为从第2行起,也不能省略第2行autocmd!吗?
John Karahalis

46

如果您在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 2010年

3
太好了,谢谢。如果这样做,请避免我刚刚犯下的屁。我打开gvim,将其添加到我的vimrc中,然后尝试确认它是否有效。不... 20分钟后,我意识到在添加AUTOCMD之后,我就一次放弃了文件的来源。当然,一旦完成,一切都会正常。我想这对我来说有点太元了,而且我有一个心理上的“堆栈溢出”。
Charlie Flowers

3
我用了它,但也检查是否$GVIMRC存在,因为有时不存在。 if has('gui_running') && filereadable($MYGVIMRC)
k107 2014年

一开始对我来说唯一奇怪的是,它只是重新加载了vimrc文件,保留了已设置的内容。例如,如果您最初在vimrc中具有“设置编号”,然后注释该行并保存文档,则左侧仍然有编号。但这实际上是有道理的……如果您想禁用某些功能,则应该手动进行。
piponazo

1
有没有理由不使用au BufWritePost $MYVIMRC还是au BufWritePost $MYVIMRC,$MYGVIMRC
ph


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://diff)
  • 如果使用,不会产生错误 vim-tiny

当然,仅当您vimrc在vim中进行编辑时,才会自动加载。


只有当文件都vim在我正在编辑的同一实例中打开时,这才似乎起作用$MYVIMRC。例如,如果他们在另一个终端中,那么我仍然必须手动获取$MYVIMRC。有办法解决这个问题吗?
Zoey Hewll '17

1
并不是我所知道的-这可以通过在当前电流vim写出文件时捕获来实现。可能可以在文件本身上监视mtime,但是不确定如何在不异步轮询的情况下执行该操作。
汤姆·黑尔

1

autocmd!bufwritepost _vimrc源%

保存时,它将自动重新加载_vimrc文件中的所有配置

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.