Search code examples
gitvimexternalvimdiff

How do you cancel an external git diff?


I've got vim setup as my external diff tool:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"

Say I have 300 files that have been modified; via bash, I type "git diff". It launches 300 vimdiffs sequentially, how do I abort it?


Solution

  • If stopping the process is not enough, killing the shell itself (in which you launched the git diff) might be more effective.

    http://trick.vanstaveren.us/wp/wp-uploads/2009/06/close-this-window.png


    See also Git Diff with Vimdiff

    VimDiff

    Not being ready to go full speed into using vimdiff (I’m just new to it), I put the following in ‘gitvimdiff’.
    The result is that I can use vimdiff to look at git-diff by running ‘gitvimdiff‘, but a normal invocation of ‘git diff’ behaves as I’m used to.

    #!/bin/sh
    
    if [ -n "${GIT_EXTERNAL_DIFF}" ]; then
    [ "${GIT_EXTERNAL_DIFF}" = "${0}" ] ||
    { echo “GIT_EXTERNAL_DIFF set to unexpected value” 1>&2; exit 1; }
    exec vimdiff “$2″ “$5″
    else
    GIT_EXTERNAL_DIFF=”${0}” exec git –no-pager diff “$@”
    fi
    

    But if you still want the modified git diff, a git status might help before launching it ;)

    And you can setup a function to get the old git diff behavior if needed:

    I still have access to the default git diff behavior with the --no-ext-diff flag. Here’s a function I put in my bash configuration files:

    function git_diff() {
      git diff --no-ext-diff -w "$@" | vim -R -
    }
    
    • --no-ext-diff: to prevent using vimdiff
    • -w: to ignore whitespace
    • -R: to start vim in read-only mode
    • -: to make vim act as a pager