Ist es möglich, vim-Konfigurationen anzuwenden, ohne neu zu starten?

80

Ich möchte die .vimrcDatei von Vim aus bearbeiten und anwenden, ohne Vim neu zu starten.

Heilige
quelle

Antworten:

80

Ja, verwenden Sie einfach den :so %Befehl, während Sie Ihre .vimrc bearbeiten.

Wenn Sie möchten, dass vim Ihre Konfiguration automatisch neu lädt, müssen Sie die folgenden Befehle hinzufügen:

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

Die Gruppierung von Autocommand dient dazu, ein "exponentielles" Neuladen zu vermeiden, wenn Sie Ihre Konfiguration mehrmals speichern.

Raoul Supercopter
quelle
Beachten Sie dies nicht mit nicht funktioniert gvimrcoder wenn die Datei aufgerufen wird , _vimrcoder vimrc, oder , wenn Sie eine Datei mit dem Namen bearbeiten .vimrcin einem anderen Verzeichnis. Siehe meine Antwort, um diese Probleme zu beheben.
Tom Hale
Für mich scheitert es mit Fehlern wie Function Inc already exist, add ! to replace it.
Hi-Angel
Welche Funktion hat die Augroup in diesem Zusammenhang? Könnte dies nicht so einfach umgeschrieben werden autocmd! bufwritepost .vimrc source ~/.vimrc? Selbst wenn die Gruppe aus irgendeinem Grund benötigt wird, kann Zeile 2 nicht weggelassen werden, wenn Zeile 3 zunächst neu geschrieben wird autocmd!?
John Karahalis
46

Hier ist eine plattformübergreifendere Version, wenn Sie unter Mac / Windows / Linux arbeiten und gvimrc:

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

Das Autocmd überwacht alle potenziellen *vimrcDateien und lädt bei einer Änderung die vimrcDatei neu, gefolgt von gvimrcder Ausführung der GUI.

Matpie
quelle
5
Es wird festgelegt, wenn GUI Vim gestartet wird. siehe:help gvimrc
Matpie
3
FANTASTISCH, danke. Wenn Sie dies tun, vermeiden Sie den Gehirnfurz, den ich gerade begangen habe ... Ich habe gvim geöffnet, dies meinem vimrc hinzugefügt und dann versucht, zu bestätigen, dass es funktioniert. Nein ... 20 Minuten später wird mir klar, dass ich vergessen habe, die Datei einmal zu speichern, nachdem das Auto hinzugefügt wurde. Sobald ich das getan habe, hat natürlich alles funktioniert. Ich denke, es war ein bisschen zu meta für mich und ich hatte einen mentalen "Stapelüberlauf".
Charlie Flowers
3
Ich habe das benutzt, aber auch überprüft, ob das $GVIMRCexistiert, weil es manchmal nicht existiert. if has('gui_running') && filereadable($MYGVIMRC)
K107
Das einzige, was mir anfangs seltsam war, ist, dass die vimrc-Datei einfach neu geladen wird und das bereits festgelegte Material erhalten bleibt. Wenn Sie beispielsweise zunächst in Ihrem vimrc "Nummer gesetzt" haben und dann diese Zeile kommentieren und das Dokument speichern, haben Sie immer noch die Nummern links. Aber es hat tatsächlich Sinn ... Wenn Sie etwas deaktivieren möchten, sollten Sie es manuell tun.
Piponazo
1
Irgendein Grund, nicht zu verwenden au BufWritePost $MYVIMRCoder au BufWritePost $MYVIMRC,$MYGVIMRC?
Phs
35

Quelle Ihrer vimrc-Datei :source ~/.vimrc

Shingara
quelle
1
auf Windows, nur: so ~ / _vimrc
Danniel Little
8
" Quickly edit/reload this configuration file
nnoremap gev :e $MYVIMRC<CR>
nnoremap gsv :so $MYVIMRC<CR>

Um automatisch nachladen auf speichern, fügen Sie folgendes zu Ihrem $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

und geben Sie dann zum letzten Mal Folgendes ein:

:so %

Wenn Sie das nächste Mal speichern vimrc, wird es automatisch neu geladen.

Eigenschaften:

  • Sagt dem Benutzer, was passiert ist (auch Anmeldung bei :messages)
  • Verarbeitet verschiedene Namen für die Konfigurationsdateien
  • Stellt sicher, dass es nur mit der tatsächlichen Konfigurationsdatei übereinstimmt (ignoriert Kopien in anderen Verzeichnissen oder einen fugitive://Unterschied)
  • Bei Verwendung wird kein Fehler generiert vim-tiny

Natürlich erfolgt das automatische Neuladen nur, wenn Sie Ihr vimrcin vim bearbeiten .

Tom Hale
quelle
Dies scheint nur zu funktionieren, wenn alle Dateien in derselben Instanz geöffnet sind, in der vimich sie bearbeite $MYVIMRC. Wenn sie sich zum Beispiel in einem anderen Terminal befinden, muss ich immer noch manuell beschaffen $MYVIMRC. Gibt es eine Möglichkeit, dies zu umgehen?
Zoey Hewll
1
Nicht, dass ich es wüsste - dies funktioniert durch Abfangen, wenn der aktuelle vimdie Datei ausschreibt. Es ist möglicherweise möglich, die mtime in der Datei selbst zu überwachen, ist sich jedoch nicht sicher, wie dies ohne asynchrones Abrufen erfolgen soll.
Tom Hale
1

autocmd! bufwritepost _vimrc source%

Dadurch werden beim Speichern automatisch alle Konfigurationen in der Datei _vimrc neu geladen

James
quelle