From: thinca Date: Tue, 10 Feb 2026 21:52:58 +0000 (+0100) Subject: runtime(vimgoto): Fix gf in Vim script X-Git-Tag: v9.1.2145~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92053449d42b4e5c0cea44d343947a01516fcc63;p=thirdparty%2Fvim.git runtime(vimgoto): Fix gf in Vim script Problem: `gf` in Vim script fails if multiple target files exist. Solution: Use globpath() which returns an array. In a Vim script, `gf` on `some#func()` will jump to `autoload/some.vim`. In this case, if there are multiple `autoload/foo.vim`s in 'runtimepath', `globpath(&runtimepath, path)` will return multiple paths, separated by newlines. As a result, the second and subsequent paths will be executed as commands in `autoload/vimgoto.vim:195`, causing an error. This change fixes this issue by making the result of `globpath()` an array. closes: #19379 Signed-off-by: thinca Signed-off-by: Christian Brabandt --- diff --git a/runtime/autoload/vimgoto.vim b/runtime/autoload/vimgoto.vim index cb41cc7de2..32756e07df 100644 --- a/runtime/autoload/vimgoto.vim +++ b/runtime/autoload/vimgoto.vim @@ -4,7 +4,8 @@ vim9script # Contributers: @lacygoill # Shane-XB-Qian # Andrew Radev -# Last Change: 2025 Oct 17 +# thinca +# Last Change: 2026 Feb 10 # # Vim script to handle jumping to the targets of several types of Vim commands # (:import, :packadd, :runtime, :colorscheme), and to autoloaded functions of @@ -41,9 +42,9 @@ export def Find(editcmd: string) #{{{2 if stridx(curfunc, '#') >= 0 var parts = split(curfunc, '#') var path = $"autoload/{join(parts[0 : -2], '/')}.vim" - var resolved_path = globpath(&runtimepath, path) + var resolved_path = globpath(&runtimepath, path, 1, 1) - if resolved_path != '' + if !resolved_path->empty() var function_pattern: string = $'^\s*\%(:\s*\)\=fun\%[ction]!\=\s\+\zs{curfunc}(' resolved_path->Open(editcmd, function_pattern) endif