On 2023-02-26, Gary Johnson wrote:
> On 2023-02-26, huang bin bin wrote:
> > Steps to reproduce
> > 
> > 1.git config difftool = vimdiff ,
> > 2.use git difftool open vimdiff compare git index file .
> > 3. execute :r ! git diff or !git diff > newfile then you will see bash get
> > hung, it can't back to vim . yout will have to ctrl+z to back terminal ,but 
> > vim
> > and previous bash process still alive background.
> > 
> > by the way, use vim without git , this bug can't reproduct,even in vimdiff 
> > mode
> > 
> > Expected behaviour
> > 
> > git difftool = vimdiff
> > compare git index , can use "!git diff >newfile" write data to a new file
> > 
> > Version of Vim
> > 
> > VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jul 25 2021 21:26:36)
> > 
> > Environment
> > 
> > windows
> > git bash
> > xterm
> 
> I can reproduce this with:
> 
>     - Vim 9.0.1355
>     - Git 2.34.1
>     - Ubuntu 22.04
> 
> I made sure my vimrc was not a factor by creating a file named vim
> in my home directory:
> 
>     #!/bin/bash
>     exec /usr/local/bin/vim -N -u NONE -i NONE "$@"
> 
> and starting git like this:
> 
>     $ PATH=$HOME:$PATH git difftool
> 
>     :r!git diff
> 
> I did notice that with my normal vimrc, the ":r!git diff" command
> does not hang Vim, but instead inserts these three lines into the
> buffer:
> 
>     Vim: Warning: Output is not to a terminal
>     ^[[24;1H^[[23;2t^[[23;1t^[[J2 files to edit
>     fatal: external diff died, stopping at src/search.c
> 
> where those ^[ are Vim's rendering of escape characters and
> src/search.c is the only modified file in my Vim repo, where I ran
> these commands.  The difference is probably due to some workarounds
> in my vimrc for other problems Vim has with launching sub-shells.
> I haven't tried to identify the settings that affect this problem.

This appears to be a bug in git rather than a bug in vim.  The 'git
diff' command normally pipes a context diff to less.  Under the
conditions of this bug report, it appears that git is using 'vim -d
...' _and_ piping the output to less.  I can't tell exactly what git
thinks it's doing, but I think I've found a workaround:  after
executing 'git difftool', in Vim, execute:

    :unlet $GIT_EXTERNAL_DIFF

before executing ':r!git diff' or any other git command.  That could
probably be put in your vimrc, but I haven't tried that yet to check
for side-effects.

HTH,
Gary

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20230227031630.GC10570%40phoenix.

Raspunde prin e-mail lui