I have a config-file that I keep open in vim, but that sometimes gets changed on disk, without these changes being reflected on the terminal. Can I refresh the content on the screen without closing and re-opening the file? If so, how?

  • 2
    Related: How can I reload all buffers at once? at Vim SE
    – kenorb
    Apr 18 '15 at 21:06
  • Wrap up: all the answers so far are of "Poll" instead of "Push" style. That is, instead of receiving an external file change event like it was done by other software's similar features, these answers rely on vim actively polling the file change, either manually or triggered by a user action or a timer. The end result is you won't see change refreshed on screen instantaneously. Jul 1 '19 at 18:06
  • Working solution at stackoverflow.com/a/53860166/4814774
    – daGo
    Mar 31 '20 at 6:29

You can use the :edit command, without specifying a file name, to reload the current file. If you have made modifications to the file, you can use :edit! to force the reload of the current file (you will lose your modifications).

The command :edit can be abbreviated by :e. The force-edit can thus be done by :e!

  • 2
    The "!" was tripping me, but now it's clear.
    – twan163
    Aug 8 '14 at 11:41
  • 110
    Note: that's typically abbreviated to :e!. Aug 8 '14 at 12:07
  • 33
    @StephaneChazelas: Yeah,That's correct :) @twan163: Instead of :edit and :edit! you can use :e and :e! respectively.
    – Thushi
    Aug 8 '14 at 12:08
  • 13
    Lose modifications, yes and no. Crucially, you can still undo the :e!.
    – gerrit
    Sep 10 '15 at 9:22
  • 6
    Also, if you want to reload all your buffers, run: :bufdo e
    – pkout
    Nov 4 '16 at 21:43

In addition to manually refreshing the file with :edit, you can put into your ~/.vimrc

:set autoread

to make Vim automatically refresh any files that haven't been edited by Vim. Also see :checktime.

  • 2
    Buyer beware -- If you're working on fresh code and git pull be aware you could lose your unsaved changes on screen rather unintentionally.
    – 4Z4T4R
    Jun 16 '16 at 17:36
  • 5
    @toszter No, Vim will only refresh unchanged buffers. In case of changes, there will still be a query: Keep, or load? Jun 17 '16 at 7:28
  • 11
    N.B. autoread doesn't exactly work automatically. You either have to use gvim, or run external commands.
    – Sparhawk
    Sep 30 '16 at 1:37
  • 3
    Those using vim inside of tmux can get focus events by using github.com/tmux-plugins/vim-tmux-focus-events . Otherwise autoread won't help in the terminal unless you somehow call :checktime Jan 3 '17 at 15:50
  • 3
    autoread can be auto-triggered X seconds after the cursor stops moving, see this answer.
    – Tom Hale
    Aug 1 '17 at 6:16


Skip to the Wrap-up heading for the vimrc lines to add to do make your life better.


Run :checktime

Check if any buffers were changed outside of Vim. This checks and warns you if you would end up with two versions of a file.


To do automatically load changes, add in your vimrc:

set autoread

When a file has been detected to have been changed outside of Vim and it has not been changed inside of Vim, automatically read it again. When the file has been deleted this is not done.

This answer adds a caveat:

Autoread does not reload file unless you do something like run external command (like !ls or !sh etc)

Read on for solutions.

Trigger when cursor stops moving

Add to your vimrc:

au CursorHold,CursorHoldI * checktime

By default, CursorHold is triggered after the cursor remains still for 4 seconds, and is configurable via updatetime.

Trigger on buffer change or terminal focus

Add the following to your vimrc to trigger autoread when changing buffers while inside vim:

au FocusGained,BufEnter * :checktime

Catching terminal window focus inside plain vim

To have FocusGained (see above) work in plain vim, inside a terminal emulator (Xterm, tmux, etc) install the plugin: vim-tmux-focus-events

On tmux versions > 1.9, you'll need to add in .tmux.conf:

set -g focus-events on


Notifications when autoread triggers are also possible.

Here are my vimrc lines to implement all the above:

" Triger `autoread` when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
    autocmd FocusGained,BufEnter,CursorHold,CursorHoldI *
            \ if mode() !~ '\v(c|r.?|!|t)' && getcmdwintype() == '' | checktime | endif

" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
  \ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None

Thanks to ErichBSchulz for pointing me in the right direction with au CursorHold.

Thanks to this answer for solving the cmdwin issue.

  • 7
    excellent post! Feels like one of those things where this should be the default behaviour
    – JonnyRaa
    Nov 13 '17 at 10:30
  • Thanks for the idea! For those wondering about the errors in command-line window (:h cmdwin): mode check is not enough, see vi.stackexchange.com/q/14315/6891. Jan 16 '20 at 6:52
  • @HalilÖzgür Thanks! I've updated my answer to cover that case (and some others).
    – Tom Hale
    Jan 17 '20 at 8:54
  • 1
    Thanks! This answer is amazing
    – Tropilio
    Mar 24 '20 at 16:36
  • Thank you for this answer. How can I tweak it to refresh ALL currently opened buffers? (:buffdo e) Jul 9 '20 at 17:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.