如何在不重新启动 vim 的情况下重新加载 .vimrc 文件?

ivo*_*ivo 576 vim vimrc

你能编辑你的.vimrc文件并重新加载它而不必重新启动 Vim 吗?

Mat*_*iva 717

如果您正在编辑它,您可以使用以下命令重新加载它:

:so %
Run Code Online (Sandbox Code Playgroud)

%代表当前文件名(参见:h current-file),:so是 的缩写:source,它读取指定文件的内容并将其视为 Vim 代码。

通常,要重新加载当前活动的 .vimrc,请使用以下命令(请参阅Daily Vim):

:so $MYVIMRC
Run Code Online (Sandbox Code Playgroud)

  • 和`:so ~/.vimrc` 也应该在 unix 上工作 (42认同)
  • 请注意,如果键盘映射已经就位,那么即使从新的 vimrc 中删除它们也不会被删除 (4认同)
  • :so ~/_vimrc 适用于 Windows。当然,我将 _vimrc 保存在我的 windows 主目录中,否则这将不起作用。要查看 Vim 认为您的主目录的内容,请使用 `:echo expand("~")`。 (3认同)
  • 看看 http://stackoverflow.com/questions/803464/how-do-i-source-something-in-my-vimrc-file (2认同)

小智 80

更好的是,您将 Vim 配置为监视您的更改.vimrc并自动重新加载配置。

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

资料来源:SO 上的这个答案

注意:这个特殊的方法监视 Vim 配置文件名的许多变化,以便它与 GUI Vim、Windows Vim 等兼容。

  • 这种方法的性能如何? (2认同)

Tom*_*ale 12

键映射

" Quickly edit/reload this configuration file
nnoremap gev :e $MYVIMRC<CR>
nnoremap gsv :so $MYVIMRC<CR>
Run Code Online (Sandbox Code Playgroud)

完全自动化的解决方案

要在保存时自动重新加载,请将以下内容添加到您的$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
Run Code Online (Sandbox Code Playgroud)

然后最后一次输入:

:so %
Run Code Online (Sandbox Code Playgroud)

下次保存时vimrc,它会自动重新加载。

特征:

  • 告诉用户发生了什么(也登录到:messages
  • 处理配置文件的各种名称
  • 确保它只匹配实际的配置文件(忽略其他目录中的副本,或fugitive://差异)
  • 如果使用不会产生错误 vim-tiny

当然,只有vimrc在 vim 中编辑时才会自动重新加载。


小智 5

记忆/打字的替代方法:so $MYVIMRC是这些映射。它可以让您快速编辑 vimrc ( ev) 或源 vimrc ( sv)。

" Quickly open/reload vim
nnoremap <leader>ev :split $MYVIMRC<CR>  
nnoremap <leader>sv :source $MYVIMRC<CR>     
Run Code Online (Sandbox Code Playgroud)