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

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

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

答案1

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

:so %

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

一般来说,要重新加载当前活动的 .vimrc,请使用以下命令(参见每日活力):

:so $MYVIMRC

答案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

来源:这个答案

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

答案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

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

答案4

我有一个略有不同的 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>

为了避免两次加载该函数我们设置:

if !exists('*ReloadVimrcFunction')

我们还保存了光标位置,因为每次重新加载时光标位置都会改变,这很烦人$MYVIMRC

我还有一个 augroup,每次保存 $MYVIMRC 时都会触发此功能

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

相关内容