再起動せずにvim設定を適用することは可能ですか?


80

.vimrcVimからファイルを編集し、Vimを再起動せずに適用したい。

回答:


80

はい、:so %.vimrcの編集中にコマンドを使用するだけです。

vimで設定を自動リロードする場合は、次のコマンドを追加する必要があります。

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

自動コマンドのグループ化は、構成を数回保存した場合に「指数関数的な」再ロードを回避するためにここにあります。


これは、またはgvimrcファイルが呼び出された_vimrc場合vimrc、または.vimrc別のディレクトリで呼び出されたファイルを編集した場合には機能しないことに注意してください。これらの問題に対処するには、私の回答を参照してください。
トム・ヘイル

私にとっては、のようなエラーで失敗しFunction Inc already exist, add ! to replace itます。
ハイエンジェル

このコンテキストでaugroupはどのような機能を果たしますか?これを単純に書き直すことはできませんautocmd! bufwritepost .vimrc source ~/.vimrcか?なんらかの理由でグループが必要になったとしても、3行目をautocmd!?で始まるように書き直せば、2行目を省略できませんでした。
JohnKarahalis20年

46

Mac / Windows / Linuxで実行している場合、よりクロスプラットフォーム互換のバージョンがありますgvimrc

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

autocmdはすべての潜在的な*vimrcファイルを監視し、vimrcファイルが変更されると、ファイルを再ロードしてからgvimrc、GUIが実行されているかどうかを確認します。


5
GUIVimの起動時に設定されます。参照:help gvimrc
matpie 2010年

3
ファンタスティック、ありがとう。これを行う場合は、コミットしたばかりの脳のおならを避けてください... gvimを開き、これをvimrcに追加して、機能することを確認しようとしました。いいえ... 20分後、AUTOCMDが追加された後、ファイルのソースを忘れたことに気付きました。もちろん、一度それを行うと、すべてがうまくいきました。それは私には少しメタすぎたと思います、そして私は精神的な「スタックオーバーフロー」を持っていました。
チャーリーフラワーズ

3
私はこれを使用しました$GVIMRCが、存在しない場合もあるため、存在するかどうかも確認します。 if has('gui_running') && filereadable($MYGVIMRC)
k107 2014

私にとって最初に奇妙だったのは、すでに設定されているものを保持したままvimrcファイルをリロードするだけであるということだけです。たとえば、vimrcに最初に「setnumber」があり、その行にコメントを付けてドキュメントを保存した場合、左側にまだ番号があります。しかし、実際には意味があります...何かを無効にしたい場合は、手動で行う必要があります。
piponazo 2015年

1
使用しない理由au BufWritePost $MYVIMRCau BufWritePost $MYVIMRC,$MYGVIMRC
phs 2016年


8
" 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で編集した場合にのみ発生します。


これはvim、私が編集しているのと同じインスタンスでファイルがすべて開いている場合にのみ機能するようです$MYVIMRC。たとえば、それらが別の端末にある場合でも、手動でソースを取得する必要があります$MYVIMRC。これを回避する方法はありますか?
Zoey Hewll 2017

1
私が知っていることではありません-これは、現在vimがファイルを書き出すときにキャッチすることによって機能します。ファイル自体のmtimeを監視することは可能かもしれませんが、非同期ポーリングなしでそれを行う方法がわかりません。
トム・ヘイル

1

autocmd!bufwritepost _vimrcソース%

これにより、保存時に_vimrcファイル内のすべての設定が自動的に再読み込みされます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.