Can you edit your .vimrc file and reload it without having to restart Vim?


If you're editing it, you can reload it with:

:so %

% stands for current file name (see :h current-file) and :so is short for :source, which reads the content of the specified file and treats it as Vim code.

In general, to re-load the currently active .vimrc, use the following (see Daily Vim):

  • 2
    Have a look at stackoverflow.com/questions/803464/… – mrucci Apr 17 '10 at 14:27
  • 42
    and :so ~/.vimrc should work too on unix – Yab May 8 '11 at 18:18
  • 3
    :so ~/_vimrc works on windows. Of course, I keep my _vimrc in my windows home directory, or else this won't work. To see what Vim considers your home directory, use :echo expand("~"). – Daniel Miladinov Nov 30 '12 at 14:10
  • 4
    Note that if keyboard mappings were already in place, then they will not erased even if they are deleted from the new vimrc – Phani Oct 2 '14 at 6:58
  • Or :so ~/.vim/gvimrc or wherever you put it of course – NeilG Aug 20 '19 at 1:47

Even better, you configure Vim to watch for changes in your .vimrc and automatically reload the config.

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

Source: this answer on SO

Note: this particular method watches for the many variations of Vim config filenames so that it's compatible with GUI Vim, Windows Vim, etc.

  • 2
    How performant is this method? – Alexej Magura Sep 19 '17 at 18:37
  • I find that use this kind of command sometimes hangs my nvim for a few seconds or longer. – jdhao Sep 29 '18 at 8:29

Key mappings

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

Completely automated solution

To automatically reload upon save, add the following to your $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

and then for the last time, type:

:so %

The next time you save your vimrc, it will be automatically reloaded.


  • Tells the user what has happened (also logging to :messages)
  • Handles various names for the configuration files
  • Ensures that it wil only match the actual configuration file (ignores copies in other directories, or a fugitive:// diff)
  • Won't generate an error if using vim-tiny

Of course, the automatic reload will only happen if you edit your vimrc in vim.


An alternative to remembering/typing :so $MYVIMRC is these mappings. It lets you quickly edit vimrc (ev) or source vimrc (sv).

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

I have a slightly different version of 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"
noremap <silent> <Leader>v :drop $MYVIMRC<cr>
command! -nargs=0 ReloadVimrc :call ReloadVimrcFunction()
nnoremap <silent> <C-s> :call ReloadVimrcFunction()<CR>

In order to avoid loading the function twice we set:

if !exists('*ReloadVimrcFunction')

We also save the cursor position because it would be anoying to have our cursor positioning changing every time we reload $MYVIMRC.

I also have an augroup to trigger this function each time I save $MYVIMRC

augroup Reload
    autocmd BufWritePost $MYVIMRC call ReloadVimrcFunction()
augroup END

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.