您可以编辑.vimrc文件并重新加载它而不必重新启动Vim吗?

#1 楼

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

:so %


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

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

:so $MYVIMRC


评论


看看stackoverflow.com/questions/803464/…

–mrucci
2010-4-17的14:27

和:so〜/ .vimrc在Unix上也应该工作

– Yab
2011年5月8日在18:18

:so〜/ _vimrc在Windows上工作。当然,我将_vimrc保留在Windows主目录中,否则将无法正常工作。要查看Vim认为您的主目录是什么,请使用:echo expand(“〜”)。

–丹尼尔·米拉迪诺夫(Daniel Miladinov)
2012年11月30日14:10

请注意,如果已经存在键盘映射,那么即使将其从新的vimrc中删除,也不会删除它们。

– Phani
2014年10月2日,下午6:58

或者:so〜/ .vim / gvimrc或放在任何地方

– NeilG
19年8月20日在1:47



#2 楼

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

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


来源:关于SO的此答案

注意:此特定方法会监视Vim配置文件名的多种变化,以便与GUI Vim,Windows Vim等兼容。

评论


这种方法的表现如何?

– Alexej Magura
17年9月19日在18:37

我发现使用这种命令有时会使我的nvim挂起几秒钟或更长时间。

– jdhao
18-09-29在8:29

#3 楼

键映射

" 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时,才会发生自动重装。

#4 楼

这些映射是记住/键入:so $MYVIMRC的一种替代方法。它使您可以快速编辑vimrc(ev)或源vimrc(sv)。

" Quickly open/reload vim
nnoremap <leader>ev :split $MYVIMRC<CR>  
nnoremap <leader>sv :source $MYVIMRC<CR>     


#5 楼

我使用的ReloadVimrcFunction版本略有不同。
为了避免两次加载该函数,我们设置了以下内容:
" Reloads vimrc after saving it but keep cursor position
if !exists('*ReloadVimrcFunction')
    function! ReloadVimrcFunction()
        let save_cursor = getcurpos()
        source $MYVIMRC | windo redraw
        call setpos('.', save_cursor)
        echom "Reloaded $MYVIMRC"
    endfunction
endif
noremap <silent> <Leader>v :drop $MYVIMRC<cr>
command! -nargs=0 ReloadVimrc :call ReloadVimrcFunction()
nnoremap <silent> <C-s> :call ReloadVimrcFunction()<CR>

我们还保存了光标位置,因为这样会麻烦每次重新加载$MYVIMRC时,光标的位置都会发生变化。
每次我保存$ MYVIMRC时,我都有一个augroup来触发此功能。
if !exists('*ReloadVimrcFunction')