Given a modified buffer, how can I diff it with the file backing it on disk to see what I've changed?
Asked
Active
Viewed 8,305 times
36
-
Related/Duplicate: How to view diff when emacs suggests to recover this file? – Kaushal Modi Jan 17 '15 at 17:11
-
There has been the same question at unix.stackexchange.com, but with less asnwers. – imz -- Ivan Zakharyaschev Jan 24 '15 at 10:00
3 Answers
43
You want the command M-x diff-buffer-with-file. See the manual:
diff-buffer-with-file is an interactive autoloaded compiled Lisp function in `diff.el'.
(diff-buffer-with-file &optional BUFFER)
View the differences between BUFFER and its associated file. This requires the external program
diff
to be in yourexec-path
.
You may also be interested in highlight-changes-mode
which automatically and interactively highlights changes made to the buffer after it was enabled.

PythonNut
- 10,363
- 2
- 30
- 76
-
Along the lines of
highlight-changes-mode
there's also thediff-hl
package in GNU ELPA. – Stefan Jan 17 '15 at 04:00 -
1Yes, but right now it only works to show diffs between the (saved) buffer and a
vc
revision. I worked on diffing the buffer (as opposed to its backing file) in diff-hl #33, but it's blocked on a bug in the Emacs core. – PythonNut Jan 17 '15 at 05:27 -
-
-
1
24
Command ediff-current-file
:
ediff-current-file is an interactive autoloaded Lisp function in
`ediff.el'.
(ediff-current-file)
Start ediff between current buffer and its file on disk.
This command can be used instead of `revert-buffer'. If there is
nothing to revert then this command fails.

Drew
- 77,472
- 10
- 114
- 243
-
5
ediff-current-file
has some benefits overdiff-buffer-with-file
if you want interactive review of changes rather than a plain diff. The interactive review even allows to selectively revert some parts, in case you finally don't want to save them. See also http://emacs.stackexchange.com/a/3778/10614 for a more complete answer. – Stéphane Gourichon Dec 29 '15 at 11:20
0
A simple way to achieve this is with the package line-reminder
, which shows unsaved and saved changes in current session. You can enable it globally with
(global-line-reminder-mode t)
or on a per-buffer basis with
(line-reminder-mode t)