diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index ea9820b..a7f008d 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -6767,8 +6767,12 @@ function! s:BlameCommitFileLnum(...) abort endfunction function! s:BlameLeave() abort - let bufwinnr = bufwinnr(s:BlameBufnr()) - if bufwinnr > 0 + let state = s:TempState() + let bufwinnr = win_id2win(get(state, 'origin_winid')) + if bufwinnr == 0 + let bufwinnr = bufwinnr(get(state, 'origin_bufnr', -1)) + endif + if get(state, 'filetype', '') ==# 'fugitiveblame' && bufwinnr > 0 let bufnr = bufnr('') exe bufwinnr . 'wincmd w' return bufnr . 'bdelete' @@ -6961,8 +6965,10 @@ function! s:BlameSubcommand(line1, count, range, bang, mods, options) abort if a:mods =~# '\' silent tabedit % endif - let bufnr = bufnr('') - let temp_state.origin_bufnr = bufnr + let temp_state.origin_bufnr = bufnr('') + if exists('*win_getid') + let temp_state.origin_winid = win_getid() + endif let restore = [] let mods = substitute(a:mods, '\', '', 'g') for winnr in range(winnr('$'),1,-1) @@ -6975,11 +6981,11 @@ function! s:BlameSubcommand(line1, count, range, bang, mods, options) abort endif endif let win_blame_bufnr = s:BlameBufnr(winbufnr(winnr)) - if getwinvar(winnr, '&scrollbind') ? win_blame_bufnr == bufnr : win_blame_bufnr > 0 + if getwinvar(winnr, '&scrollbind') ? win_blame_bufnr == temp_state.origin_bufnr : win_blame_bufnr > 0 execute winbufnr(winnr).'bdelete' endif endfor - let restore_winnr = exists('*win_getid') ? win_getid() : 'bufwinnr(' . bufnr . ')' + let restore_winnr = get(temp_state, 'origin_winid', 'bufwinnr(' . temp_state.origin_bufnr . ')') if !&l:scrollbind call add(restore, 'call setwinvar(' . restore_winnr . ',"&scrollbind",0)') endif