mirror of
https://github.com/vim/vim.git
synced 2026-05-28 00:21:37 +02:00
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 <thinca@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
36f4498710
commit
92053449d4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user