vimを再起動せずに.vimrcファイルを再読み込みするには?

vim vimrc

Vimを再起動しなくても、.vimrcファイルを編集してリロードすることはできますか?

  568  ivo  2010-04-17


ベストアンサー

編集してるならリロードでいいよ

:so %

%は現在のファイル名(:h current-file参照)、:so:sourceの略で、指定したファイルの内容を読み込んでVimのコードとして扱います

一般的に、現在アクティブな .vimrc を再読み込みするには、以下のようにします (Daily Vim を参照してください)

:so $MYVIMRC

705  Matteo Riva  2010-04-17


さらに良いのは、.vimrcの変更を監視し、自動的に設定をリロードするようにVimを設定することです

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

ソースです。SO上のこの回答

注意: この特定のメソッドは、GUI Vim、Windows Vimなどと互換性があるように、Vimの設定ファイル名のバリエーションの多さに注目しています

80  Andrei  2012-04-28


Key mappings

" 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を保存すると、自動的にリロードされます

Features:

  • 何が起こったかをユーザに伝える (:messages にもログを記録する)
  • 設定ファイルの様々な名前を扱います
  • 実際の設定ファイルにのみマッチすることを保証します (他のディレクトリのコピーや fugitive:// の差分は無視します)
  • vim-tinyを使用してもエラーが発生しない

もちろん、自動リロードはvimでvimrcを編集した場合のみ発生します

11  Tom Hale  2016-09-02


:so $MYVIMRCを覚えたりタイプしたりする代わりに、これらのマッピングがあります。これにより、vimrc (ev) やソース vimrc (sv) を素早く編集することができます

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

5  maged  2015-06-17


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をリロードするたびにカーソルの位置が変わるのは煩わしいので、カーソルの位置も保存しています

また、$MYVIMRCを保存するたびにこの関数を起動するためのaugroupを持っています

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

0  SergioAraujo  2020-10-15


タイトルとURLをコピーしました