Put the starting window back before the action opens the tag

The loop opens each entry of a multi-selection in the starting window, so giving
the survivor's action that window left it on the tag's file, and 'ctrl-v' showed
the tag twice. Restore buffer and view first, as the quickfix branch does, then
open where the key asks and go to the line the entry reached.
This commit is contained in:
Junegunn Choi
2026-09-28 06:44:54 +09:00
parent 21aacd5304
commit b4a045f8b4
+6 -2
View File
@@ -1850,9 +1850,13 @@ function! s:tags_sink(from, lines)
call s:fill_quickfix('tags', qfl)
elseif len(qfl) == 1
" Entries opened in the loop take the action only when one was selected, so
" the last one standing of a multi-selection still owes the key its action
" the last one standing of a multi-selection still owes the key its action.
" The loop opened it in the starting window, which goes back as it was first
if len(list) > 1
call s:action_for(key, qfl[0].filename, 1)
call s:execute_silent('b '.buf)
call winrestview(view)
call s:action_for(key, qfl[0].filename)
call cursor(qfl[0].lnum, 1)
endif
normal! ^zvzz
endif