when a file is changed and I'm working on it, vim prompts me two choices:
W11: Warning: File "foo.bar" has changed since editing started
See ":help W11" for more info.
[O]K, (L)oad File:
Is there a way to make it show me a diff between the buffer contents and what's on disk?
Place the following in your .vimrc file taken from :h :DiffOrig
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
Then when prompted hit o
for ok and then execute :DiffOrig
. You will be presented with the diff.
If you decide that you want to take the file from disk execute :e!
to reload the file from disk.
Quick overview of :DiffOrig
Vertically split a new buffer and read in the file in question from disk and mark both buffers to be diffed.
Glory of detail for :DiffOrig
:vert {cmd}
will execute any {cmd} and any splits will be split vertically.new
open a new split with a new bufferset bt=nofile
set 'buftype'
to nofile
so no file will be written to diskr
is short for :read {file}
. r #
reads in to the buffer the alternative file, which is the buffer that was just split from. This alternative file is the file in question being read from disk.0d_
which is short for 0delete _
. When the alternative file is read in it leaves a blank line at top. 0delete _
will remove the top line into the black hole register so it does not mess with other registers.diffthis
set buffer to diffed.windcmd p
switches back to the previous window. This is the same as <c-w>p
in normal mode.diffthis
this sets the changed buffer to be included into the diff set.For more information:
:h :DiffOrig
:h :e
:h :diff
:h vert
:h new
:h r
:h d
:h "_
:h windcmd
:h diffthis
:h :c_#
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With