38

Given a modified buffer, how can I diff it with the file backing it on disk to see what I've changed?

2

3 Answers 3

45

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 your exec-path.


You may also be interested in highlight-changes-mode which automatically and interactively highlights changes made to the buffer after it was enabled.

5
  • Along the lines of highlight-changes-mode there's also the diff-hl package in GNU ELPA.
    – Stefan
    Commented Jan 17, 2015 at 4:00
  • 1
    Yes, 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
    Commented Jan 17, 2015 at 5:27
  • Do you have a bug-report number for that?
    – Stefan
    Commented Jan 17, 2015 at 14:01
  • @Stefan, I haven't gotten around to it yet.
    – PythonNut
    Commented Jan 18, 2015 at 5:23
  • 1
    Got fixed a (probably) long time ago: works in 2019! :)
    – mistige
    Commented Jul 27, 2019 at 10:26
25

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.
1
  • 5
    ediff-current-file has some benefits over diff-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 emacs.stackexchange.com/a/3778/10614 for a more complete answer. Commented Dec 29, 2015 at 11:20
1

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)
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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