threads / discuss / 19394

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

Subject: Running vimdiff in read-only mode with git-difftool?

## tl;dr

4 messages between May 18, 2009 and May 18, 2009.

replies: 3people: 2as markdown or json

Nick Welch· May 18, 2009, 05:01 UTC · lore
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· May 18, 2009, 05:42 UTC · re: Nick Welch · lore

Re: Running vimdiff in read-only mode with git-difftool?

On Sun, May 17, 2009 at 10:01:02PM -0700, Nick Welch wrote:
Show 8 quoted lines
> 
> 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· May 18, 2009, 05:51 UTC · re: Nick Welch · lore

Re: Running vimdiff in read-only mode with git-difftool?

On Sun, May 17, 2009 at 10:01:02PM -0700, Nick Welch wrote:
Show 8 quoted lines
> 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· May 18, 2009, 06:06 UTC · re: David Aguilar · lore

Re: Running vimdiff in read-only mode with git-difftool?

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:
Show 39 quoted lines
> 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
>
>
>

← back to recent threads