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. 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. Commented Jan 17, 2015 at 5:27
  • Do you have a bug-report number for that? Commented Jan 17, 2015 at 14:01
  • @Stefan, I haven't gotten around to it yet. Commented Jan 18, 2015 at 5:23
  • 1
    Got fixed a (probably) long time ago: works in 2019! :) 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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.