# Running vimdiff in read-only mode with git-difftool?

4 messages from 2009-05-18 to 2009-05-18. Participants: Nick Welch, David Aguilar.
Thread: https://gitlist.dev/t/19394

## Nick Welch, 2009-05-18 05:01

Subject: Running vimdiff in read-only mode with git-difftool?
Message-ID: <9e00fd550905172201n6c95dc1bia48c9ac25d8ec98f@mail.gmail.com>
URL: https://gitlist.dev/e/9e00fd550905172201n6c95dc1bia48c9ac25d8ec98f%40mail.gmail.com

```
I'm running:

git difftool -y --tool=vimdiff -U99999 --patience

and I have the following in ~/.gitconfig:

[difftool "vimdiff"]
    cmd = "vimdiff -R"

But vimdiff is still run in read/write mode.  In the output of ps, I see:

vim -d -c wincmd l /tmp/.diff_bP2Tjf <original file>

There should be an -R in there, but there's not.  And if I'm trying to
edit <original file> in another instance of vim, I get the annoying "a swap
file exists, what should I do?" message, which is my main motivation in
trying to use read-only mode.

According to the git-difftool manpage, what I'm trying to do should work:

    Instead of running one of the known diff tools, git-difftool can be
    customized to run an alternative program by specifying the command line to
    invoke in a configuration variable difftool.<tool>.cmd.

I've also tried specifying the full path to vim diff, like this:

[difftool "vimdiff"]
    cmd = "/usr/bin/vimdiff -R"

and it didn't work either.

Any ideas?

```

## David Aguilar, 2009-05-18 05:42

Subject: Re: Running vimdiff in read-only mode with git-difftool?
Message-ID: <20090518054224.GA32259@gmail.com>
URL: https://gitlist.dev/e/20090518054224.GA32259%40gmail.com
In-Reply-To: <9e00fd550905172201n6c95dc1bia48c9ac25d8ec98f@mail.gmail.com>

```
On Sun, May 17, 2009 at 10:01:02PM -0700, Nick Welch wrote:
> 
> According to the git-difftool manpage, what I'm trying to do
> should work:
> 
>   Instead of running one of the known diff tools,
>   git-difftool can be customized to run an alternative
>   program by specifying the command line to invoke in a
>   configuration variable difftool.<tool>.cmd.


Custom difftool.<tool>.cmd settings only work for custom
(i.e. alternative/non-built-in) tools.

If you rename that to something like "myvimdiff"
(or anything != "vimdiff") then it'll work as expected.

I wouldn't be opposed to a patch making
{diff,merge}tool.<tool>.cmd work for built-in tools as
well as long as it had a testcase and didn't end up
making the code unnecessarily complex.

-- 

	David

```

## David Aguilar, 2009-05-18 05:51

Subject: Re: Running vimdiff in read-only mode with git-difftool?
Message-ID: <20090518055113.GB32259@gmail.com>
URL: https://gitlist.dev/e/20090518055113.GB32259%40gmail.com
In-Reply-To: <9e00fd550905172201n6c95dc1bia48c9ac25d8ec98f@mail.gmail.com>

```
On Sun, May 17, 2009 at 10:01:02PM -0700, Nick Welch wrote:
> I'm running:
> 
> git difftool -y --tool=vimdiff -U99999 --patience
> 
> and I have the following in ~/.gitconfig:
> 
> [difftool "vimdiff"]
>     cmd = "vimdiff -R"

I forgot to mention a couple of things.


If you do change that to e.g. "myvimdiff" you'll need
the $LOCAL and $REMOTE params as well; probably something
like:

[difftool "myvimdiff"]
	cmd = vim -R -d -c wincmd l \"$LOCAL\" \"$REMOTE\"


$ git difftool -y -t myvimdiff


Secondly, git-difftool receives both the pre and post-image
and doesn't actually receive the output of git-diff, so passing
--patience unfortunately won't do what you're expecting it to
do.  Piping the output of git-diff to something like kompare(?)
is probably the only way to get the nice --patience result.

It'd be nice if all diff/merge tools supported the patience
diff algorithm but that's not the case right now.

-- 

	David

```

## Nick Welch, 2009-05-18 06:06

Subject: Re: Running vimdiff in read-only mode with git-difftool?
Message-ID: <9e00fd550905172306w2cc7ab88l82bce0799016fec1@mail.gmail.com>
URL: https://gitlist.dev/e/9e00fd550905172306w2cc7ab88l82bce0799016fec1%40mail.gmail.com
In-Reply-To: <20090518055113.GB32259@gmail.com>

```
As soon as I got your first reply, I started digging and managed to
figure out the $LOCAL and $REMOTE part.

Another interesting issue is that vim doesn't syntax-highlight the temp
file, because the file extension hasn't been carried over to the temp
file's filename.  I might see if I can figure out how to hack git to
do that.

Thanks for the help.

Nick


On Sun, May 17, 2009 at 10:51 PM, David Aguilar <davvid@gmail.com> wrote:
> On Sun, May 17, 2009 at 10:01:02PM -0700, Nick Welch wrote:
>> I'm running:
>>
>> git difftool -y --tool=vimdiff -U99999 --patience
>>
>> and I have the following in ~/.gitconfig:
>>
>> [difftool "vimdiff"]
>>     cmd = "vimdiff -R"
>
> I forgot to mention a couple of things.
>
>
> If you do change that to e.g. "myvimdiff" you'll need
> the $LOCAL and $REMOTE params as well; probably something
> like:
>
> [difftool "myvimdiff"]
>        cmd = vim -R -d -c wincmd l \"$LOCAL\" \"$REMOTE\"
>
>
> $ git difftool -y -t myvimdiff
>
>
> Secondly, git-difftool receives both the pre and post-image
> and doesn't actually receive the output of git-diff, so passing
> --patience unfortunately won't do what you're expecting it to
> do.  Piping the output of git-diff to something like kompare(?)
> is probably the only way to get the nice --patience result.
>
> It'd be nice if all diff/merge tools supported the patience
> diff algorithm but that's not the case right now.
>
> --
>
>        David
>
>
>

```
