Ediff is great!!!
It can’t even show white space differences
Depends on the configured diff program and its options.
This has nothing to do with the diff program. Ediff is not able to highlight whitespace differences like it highlights non-whitespace differences. Maybe it is possible to do somehow, but by default, whitespace differences generate a diff region with no highlights (or as ediff calls it, refinements).
It is because highlights are done on word level, and whitespaces are not words.
Oh, interesting.
I see.Just popped open the Ediff code and there is a significant amount of effort put into ignoring whitespace. Like, it’s not a shortcoming per se that it can’t show this content but rather a deliberate onslaught to avoid it at all costs. The author must have been really annoyed by whitespace. 😂
I mostly use
(ediff-buffers)
in my day-to-day work in Spacemacs to compare two regions that I’ve narrowed to indirect buffers, and, interestingly, it does show me diffs that contain whitespace-only changes and prints the following to the echo area:I did a quick test with other ediff functions bound in Spacemacs, and
ediff-windows-linewise
has the same behavior, butediff-windows-wordwise
does not -- it completely ignored diffs that were whitespace only and there was not even#
binding available in that ediff session.When browsing the code, I found a local variable named ediff-whitespace (which u/doolio_ has already pointed out here in reply to you, actually), which is curious:
(defvar-local ediff-whitespace " \n\t\f\r\240" "Characters constituting white space. These characters are ignored when differing regions are split into words.")
(
\240
is Unicode symbol for nonbreakable whitespace.)I wonder whether this variable can be set to nil.
PS:
It is because highlights are done on word level, and whitespaces are not words.
Apparently word splitting is configurable with ediff-forward-word-function ?
Also very basic, IMO:
g X
- go to buffer X’s pointj
- jump to diff number (prefix arg)!
- update (re-diff)C-l
- recenter*
- refine current region#
- ignore whitespace diffs
And in case the video doesn’t say it:
Ediff has its own user manual:
C-h i g (ediff)
You sir are great. I can’t open the video on youtube to give a thumbs up, may you share the link?