]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(vimgoto): Fix gf in Vim script
authorthinca <thinca@gmail.com>
Tue, 10 Feb 2026 21:52:58 +0000 (22:52 +0100)
committerChristian Brabandt <cb@256bit.org>
Tue, 10 Feb 2026 21:52:58 +0000 (22:52 +0100)
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 <thinca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/vimgoto.vim

index cb41cc7de25827baf0cbf88c3f96be7c4cd849b9..32756e07df68aebf66b55ffcf92d465ed38fd43d 100644 (file)
@@ -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