sponsor Vim development Vim logo go to HTTPS page Vim Book Ad

AdvancedDiffOptions : Additional diff options and commands to manage them.

 script karma  Rating 8/2, Downloaded by 258    Comments, bugs, improvements  Vim wiki

created by
Ingo Karkat
script type
Vim provides a nice diff-mode; parameters like case- or whitespace-
insensitivity can be controlled through the 'diffopt' option. However, because
that option controls both the difference filtering itself as well as the
visual appearance within Vim, modifying that option on the fly with `:set`
isn't very comfortable.

This plugin provides a set of :DiffI... commands that enable you to quickly
toggle the built-in diff filtering options, and adds advanced options for
filtering blank lines, complete change hunks, lines, ranges, or patterns of

When there's a corresponding command-line option for the "diff" tool, this is
passed. The filtering of lines, ranges, and patterns is implemented by
preprocessing the buffers through the external "sed" command.

:DiffOptions            List the currently active diff options.

:DiffIClear             Clear all "ignore ..." diff options.

:DiffIWhiteSpace[!]     Ignore changes in whitespace. [!] for undo.

:DiffICase[!]           Ignore changes in case. [!] for undo.

:DiffIBlankLines[!]     Ignore blank lines. [!] for undo.

:DiffIHunks[!] [{expr}] Ignore change hunks whose lines _all_ match {expr}.
                        [!] for undo.

                        The following filters go beyond the capabilities of
                        the diff command itself; they work by preprocessing
                        the compared files before sending them to diff.

:DiffILines[!] [{expr}] Do not consider any lines that match {expr} in the
                        diff. [!] for undo.

:DiffIRange[!] [{range}]
                        Do not consider any lines that match the lines
                        specified by {range} in the diff. [!] for undo.
                        Note that Vim will still highlight additional lines at
                        the end of the longer buffer.

:DiffIPattern[!] [{expr}]
                        Do not consider any text that matches {expr} in the
                        diff (globally, not just the first match).
                        [!] for undo, i.e. removing {expr}, or all previously
                        given patterns.
                        Note that Vim will still highlight the ignored changes
                        (should there be another change in the line that is
                        not covered by {expr}), because it determines that on
                        its own.

Filter all diff hunks that only consist of comments in a Perl script:
    :DiffIHunks ^#

Ignore any differences after a line matching "EOF":
    :DiffIRange /^EOF$/,$

Ignore type differences of "char const" vs. "char" in a C program:
    :DiffIPattern [ ]const
install details
This script is packaged as a vimball. If you have the "gunzip" decompressor
in your PATH, simply edit the *.vmb.gz package in Vim; otherwise, decompress
the archive first, e.g. using WinZip. Inside Vim, install by sourcing the
vimball or via the :UseVimball command.
    vim AdvancedDiffOptions*.vmb.gz
    :so %
To uninstall, use the :RmVimball command.

- Requires Vim 7.0 or higher.
- Requires the ingo-library.vim plugin (vimscript #4433), version 1.012 or
- External command "diff" or equivalent for listing of differences.
- External command "sed" for some advanced filters (optional).

Some advanced filters require preprocessing of the compared files. The plugin
now offers several different strategies for this, each with slight differences
in supported syntax. The default is using a separate instance of Vim:
    let g:AdvancedDiffOptions_Strategy = AdvancedDiffOptions#External#Vim
With that, you can use the familiar syntax for ranges and regular expressions,
but the processing is the slowest.
If you have the sed tool on your system, you can use that instead:
    let g:AdvancedDiffOptions_Strategy = AdvancedDiffOptions#External#Sed
This is faster, but note that the tool uses a different regular expression
The fastest option is processing of the diff files inside the current Vim
instance; no external tool launch (other than diff itself) is required. Note
that this currently only supports a subset of numerical ranges (e.g. 23,42)
and "$", and that regular expression are evaluated line by line and cannot
reference other lines. Also, no detection of the file encoding is done.
    let g:AdvancedDiffOptions_Strategy = AdvancedDiffOptions#Internal#Vim

Rating scripts is only available on the HTTPS page

script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
AdvancedDiffOptions-2.00.vmb.gz 2.00 2014-09-25 7.0 Ingo Karkat - Refactor the plugin to handle different strategies to preprocess the compared files (used by some advanced filters).
- Offer preprocessing through an externally launched Vim instance, and internally in the current Vim, in addition to the existing external sed tool. Change the default to external Vim, because that offers the fullest feature set, and no need to switch regular expression dialects as with sed. Thanks to Marcelo Montú for suggesting this and sending prototype patches for both external and internal Vim processing!
AdvancedDiffOptions-1.00.vmb.gz 1.00 2014-08-05 7.0 Ingo Karkat Initial upload
ip used for rating:

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.
SourceForge.net Logo