Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to configure vimdiff to ignore ALL whitespaces?

Tags:

vim

diff

vimdiff

I'm using vim -d file1 file2 in order to see the differences between them. This works fine, but I want to ignore whitespace changes - they are irrelevant for source code files.

Vim help states that the following command will do the magic:

set diffopt+=iwhite 

But unfortunately, this command only adds -b to diff tool command line, and that only ignores trailing whitespaces. The correct command line key for diff should be -w, to ignore all whitespace changes. But I can't find how to modify the diff command line directly from Vim. Of course I can compile a custom diff, or replace diff with diff.sh, but that looks kinda ugly :(.

Is there a better way to modify how Vim interacts with the diff tool for displaying file differences?

like image 410
grigoryvp Avatar asked Aug 12 '09 10:08

grigoryvp


People also ask

How do you ignore Whitespaces?

git diff -w (alternately git diff --ignore-all-space ) ignores whitespace. You can also add --ignore-blank-lines if there are a lot of those.


2 Answers

This implements what you want (taken from the diffexpr docs with -b changed to -w):

set diffopt+=iwhite set diffexpr=DiffW() function DiffW()   let opt = ""    if &diffopt =~ "icase"      let opt = opt . "-i "    endif    if &diffopt =~ "iwhite"      let opt = opt . "-w " " swapped vim's -b with -w    endif    silent execute "!diff -a --binary " . opt .      \ v:fname_in . " " . v:fname_new .  " > " . v:fname_out endfunction 

... I'm still looking for a better diffexpr helper with respect to handling which lines map to which (GNU diff, even with -w instead of -b, is rather baffled by combining extra whitespace with minor edits like commented lines). Maybe diffchar?

like image 83
Adam Katz Avatar answered Oct 01 '22 23:10

Adam Katz


Yes. Set the iwhite option as you did, but additionally, make diffexpr empty.

From the relevant section of the vim docs:

iwhite

Ignore changes in amount of white space. Adds the "-b" flag to the "diff" command if 'diffexpr' is empty. Check the documentation of the "diff" command for what this does exactly. It should ignore adding trailing white space, but not leading white space.

Note also that you can provide a custom diff command line by setting diffexpr. See the discussion on the vimdiff man page, in particular:

The 'diffexpr' option can be set to use something else than the standard "diff" program to compare two files and find the differences.

When 'diffexpr' is empty, Vim uses this command to find the differences between file1 and file2:

diff file1 file2 > outfile 
like image 21
ire_and_curses Avatar answered Oct 01 '22 23:10

ire_and_curses