Czy można zastosować konfiguracje Vima bez restartowania?


80

Chcę edytować .vimrcplik z Vima i zastosować je bez ponownego uruchamiania Vima.

Odpowiedzi:


80

Tak, po prostu użyj :so %polecenia podczas edycji pliku .vimrc.

Jeśli chcesz, aby vim automatycznie przeładował twoją konfigurację, musisz dodać następujące polecenia:

augroup myvimrchooks
    au!
    autocmd bufwritepost .vimrc source $MYVIMRC
augroup END

grupowanie autokomendy jest tutaj, aby uniknąć "wykładniczego" przeładowywania, jeśli zapiszesz konfigurację kilka razy.


Zauważ, że to nie działa z gvimrclub jeśli twój plik ma nazwę _vimrclub vimrc, lub jeśli edytujesz plik o nazwie .vimrcw innym katalogu. Zobacz moją odpowiedź, aby rozwiązać te problemy.
Tom Hale

U mnie zawodzi z błędami typu Function Inc already exist, add ! to replace it.
Hi-Angel,

Jaką funkcję pełni augroup w tym kontekście? Czy nie można tego przepisać tak prosto autocmd! bufwritepost .vimrc source ~/.vimrc? Nawet jeśli z jakiegoś powodu grupa jest potrzebna, nie można pominąć wiersza 2, jeśli wiersz 3 zostanie przepisany na początek autocmd!?
John Karahalis,

46

Oto wersja bardziej kompatybilna z różnymi platformami, jeśli używasz systemu Mac / Windows / Linux i gvimrc:

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

Autocmd obserwuje wszystkie potencjalne *vimrcpliki, a po zmianie wczytuje vimrcplik, a następnie, gvimrcjeśli GUI jest uruchomiony.


5
Jest ustawiana podczas uruchamiania GUI Vima. patrz:help gvimrc
matpie

3
FANTASTYCZNE, dzięki. Jeśli to zrobisz, unikaj pierdnięcia mózgowego, które właśnie popełniłem ... Otworzyłem gvim, dodałem to do mojego vimrc, a następnie próbowałem potwierdzić, że działa. Nie ... 20 minut później zdaję sobie sprawę, że NIE ZAPOMNIAŁEM ŹRÓDŁA PLIKU RAZ PO DODANIU AUTOCMD. Oczywiście, kiedy już to zrobiłem, wszystko działało. Wydaje mi się, że to było dla mnie trochę zbyt meta i miałem mentalne „przepełnienie stosu”.
Charlie Flowers

3
Skorzystałem z tego, ale też sprawdziłem czy $GVIMRCistnieje, bo czasami tak nie jest. if has('gui_running') && filereadable($MYGVIMRC)
k107

Jedyną rzeczą, która była dla mnie dziwna na początku, jest to, że po prostu przeładowuje plik vimrc, zachowując rzeczy, które są już ustawione. Na przykład, jeśli masz początkowo „ustawioną liczbę” w swoim vimrc, a następnie skomentujesz tę linię i zapiszesz dokument, nadal masz liczby po lewej stronie. Ale to ma sens ... jeśli chcesz coś wyłączyć, powinieneś to zrobić ręcznie.
piponazo

1
Jakiś powód, aby nie używać au BufWritePost $MYVIMRClub au BufWritePost $MYVIMRC,$MYGVIMRC?
phs


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

Aby automatycznie załadować ponownie 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 potem ostatni raz wpisz:

:so %

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

Funkcje:

  • Informuje użytkownika o tym, co się stało (również podczas logowania :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 fugitive://różnicę)
  • Nie wygeneruje błędu, jeśli używasz vim-tiny

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


Wydaje się, że działa to tylko wtedy, gdy wszystkie pliki są otwarte w tym samym wystąpieniu, vimw którym edytuję $MYVIMRC. Jeśli na przykład znajdują się w innym terminalu, nadal muszę ręcznie pobrać źródło $MYVIMRC. Czy można to obejść?
Zoey Hewll

1
Nie żebym był tego świadomy - działa to poprzez wychwytywanie, kiedy prąd vimzapisuje plik. Może być możliwe monitorowanie czasu mtime w samym pliku, ale nie ma pewności, jak to zrobić bez odpytywania asynchronicznego.
Tom Hale

1

autocmd! bufwritepost _vimrc źródło%

spowoduje to automatyczne przeładowanie całej konfiguracji w pliku _vimrc podczas zapisywania

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.