Jak ponownie załadować plik .vimrc bez ponownego uruchamiania vima?

534

Czy możesz edytować .vimrcplik i załadować go ponownie bez konieczności restartowania Vima?

ivo
źródło

Odpowiedzi:

661

Jeśli go edytujesz, możesz go ponownie załadować:

:so %

%oznacza bieżącą nazwę pliku (patrz :h current-file) i :sojest skrótem od :source, który odczytuje zawartość określonego pliku i traktuje go jak kod Vima.

Ogólnie, aby ponownie załadować aktualnie aktywny plik .vimrc, użyj następujących poleceń (patrz Daily Vim ):

:so $MYVIMRC
Matteo Riva
źródło
36
i :so ~/.vimrcpowinien też działać na Uniksie
Yab
3
: więc ~ / _vimrc działa w systemie Windows. Oczywiście trzymam mój _vimrc w katalogu domowym systemu Windows, w przeciwnym razie to nie zadziała. Aby zobaczyć, co Vim uważa za katalog domowy, użyj :echo expand("~").
Daniel Miladinov
3
Zauważ, że jeśli mapowania klawiatury były już na miejscu, nie zostaną usunięte, nawet jeśli zostaną usunięte z nowego vimrc
Phani
Lub :so ~/.vim/gvimrcgdziekolwiek to umieścisz
NeilG
79

Co więcej, konfigurujesz Vima, aby obserwował zmiany w twoim .vimrcsystemie i automatycznie ładował konfigurację.

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

Źródło: ta odpowiedź na SO

Uwaga: ta konkretna metoda sprawdza wiele odmian nazw plików konfiguracji Vima, dzięki czemu jest kompatybilna z GUI Vim, Windows Vim itp.

Andrei
źródło
2
Jak skuteczna jest ta metoda?
Alexej Magura,
Uważam, że użycie tego rodzaju polecenia czasami zawiesza mój nvim na kilka sekund lub dłużej.
jdhao
11

Kluczowe odwzorowania

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

Całkowicie zautomatyzowane rozwiązanie

Aby automatycznie ponownie załadować po zapisaniu, dodaj następujące elementy do $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

a następnie po raz ostatni wpisz:

:so %

Następnym razem, gdy zapiszesz vimrc, zostanie on automatycznie ponownie załadowany.

Cechy:

  • Informuje użytkownika o tym, co się stało (także loguje się do :messages)
  • Obsługuje różne nazwy plików konfiguracyjnych
  • Zapewnia, że ​​będzie pasował tylko do rzeczywistego pliku konfiguracyjnego (ignoruje kopie w innych katalogach lub plik fugitive://różnicowy)
  • Nie wygeneruje błędu, jeśli używasz vim-tiny

Oczywiście automatyczne przeładowanie nastąpi tylko wtedy, gdy edytujesz swój vimrcvim.

Tom Hale
źródło
5

Alternatywą dla zapamiętywania / pisania :so $MYVIMRCsą te mapowania. Umożliwia szybką edycję vimrc ( ev) lub source vimrc ( sv).

" Quickly open/reload vim
nnoremap <leader>ev :split $MYVIMRC<CR>  
nnoremap <leader>sv :source $MYVIMRC<CR>     
maged
źródło