runetime(vim): gf maybe hang and fail
Commit:
https://github.com/vim/vim/commit/639d93fc0efe925ec87f31db7f3ccdc0add4e247
Author: Shane-XB-Qian <[email protected]>
Date: Tue Aug 12 21:28:28 2025 +0200
runetime(vim): gf maybe hang and fail
* searching'**' maybe terrible slow
* searching '**/plugin/' maybe fail
* the pattern for the :packadd/:import/:colorscheme
did not consistently check for a colon, so always use
'\%(:\s*\)\=' before the actual ex command
While at it rename the generic name vim.vim to vimgoto.vim as this more
clearly states what this script is for.
Signed-off-by: Shane-XB-Qian <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/autoload/vim.vim b/runtime/autoload/vimgoto.vim
similarity index 89%
rename from runtime/autoload/vim.vim
rename to runtime/autoload/vimgoto.vim
index c517b756f..b34dcc1a1 100644
--- a/runtime/autoload/vim.vim
+++ b/runtime/autoload/vimgoto.vim
@@ -39,7 +39,7 @@ enddef
#}}}1
# Core {{{1
def HandlePackaddLine(editcmd: string, curline: string) #{{{2
- var pat: string = '^\s*packadd!\=\s\+\zs\S\+$'
+ var pat: string = '^\s*\%(:\s*\)\=packadd!\=\s\+\zs\S\+$'
var plugin: string = curline
->matchstr(pat)
->substitute('^vim-\|\.vim$', '', 'g')
@@ -53,12 +53,9 @@ def HandlePackaddLine(editcmd: string, curline: string) #{{{2
endtry
else
var split: string = editcmd[0] == 'g' ? 'edit' : editcmd[1] == 'g' ?
'tabedit' : 'split'
- # In the past, we passed `runtime` to `getcompletion()`, instead of
- # `cmdline`. But the output was tricky to use, because it contained
- # paths relative to inconsistent root directories.
- var files: list<string> = getcompletion($'edit
**/plugin/{plugin}.vim', 'cmdline')
+ var files: list<string> = getcompletion($'plugin/{plugin}', 'runtime')
+ ->map((_, fname: string) =>
fname->findfile(&rtp)->fnamemodify(':p'))
->filter((_, path: string): bool => filereadable(path))
- ->map((_, fname: string) => fname->fnamemodify(':p'))
if empty(files)
echo 'Could not find any plugin file for ' .. string(plugin)
return
@@ -68,7 +65,7 @@ def HandlePackaddLine(editcmd: string, curline: string) #{{{2
enddef
def HandleColoLine(editcmd: string, curline: string) #{{{2
- var pat: string = '^\s*colo\%[rscheme]\s\+\zs\S\+$'
+ var pat: string = '^\s*\%(:\s*\)\=colo\%[rscheme]\s\+\zs\S\+$'
var colo: string = curline->matchstr(pat)
if colo == ''
@@ -93,7 +90,7 @@ enddef
def HandleImportLine(editcmd: string, curline: string) #{{{2
var fname: string
- var import_cmd: string = '^\s*import\s\+\%(autoload\s\+\)\='
+ var import_cmd: string = '^\s*\%(:\s*\)\=import\s\+\%(autoload\s\+\)\='
var import_alias: string = '\%(\s\+as\s\+\w\+\)\=$'
var import_string: string = import_cmd .. '\([''"]\)\zs.*\ze ' ..
import_alias
var import_expr: string = import_cmd .. '\zs.*\ze' .. import_alias
diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
index 9b0f89dbe..22b261465 100644
--- a/runtime/ftplugin/vim.vim
+++ b/runtime/ftplugin/vim.vim
@@ -9,6 +9,7 @@
" Last Change: 2025 Aug 07
" 2025 Aug 06 by Vim Project (add gf maps #17881)
" 2025 Aug 08 by Vim Project (add Vim script complete function #17871)
+" 2025 Aug 12 by Vim Project (improve vimgoto script #17970))
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -152,7 +153,7 @@ if !exists("no_plugin_maps") && !exists("no_vim_maps")
nnoremap <silent><buffer> [" :call search('\%(^\s*".*
\)\%(^\s*"\)\@!', "bW")<CR>
xnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call
search('\%(^\s*".*
\)\%(^\s*"\)\@!', "bW")<CR>
- " Purpose: Handle `:import` and `:packadd` lines in a smarter way. {{{
+ " Purpose: Handle :import, :colorscheme and :packadd lines in a smarter
way. {{{
"
" `:import` is followed by a filename or filepath. Find it.
"
@@ -171,9 +172,10 @@ if !exists("no_plugin_maps") && !exists("no_vim_maps")
" buffer.
" }}}
" We use the `F` variants, instead of the `f` ones, because they're smarter.
- nnoremap <silent><buffer> gf :<C-U>call vim#Find('gF')<CR>
- nnoremap <silent><buffer> <C-W>f :<C-U>call vim#Find("\<lt>C-W>F")<CR>
- nnoremap <silent><buffer> <C-W>gf :<C-U>call vim#Find("\<lt>C-W>gF")<CR>
+ " See $VIMRUNTIME/autoload/vimgoto.vim
+ nnoremap <silent><buffer> gf :<C-U>call vimgoto#Find('gF')<CR>
+ nnoremap <silent><buffer> <C-W>f :<C-U>call vimgoto#Find("\<lt>C-W>F")<CR>
+ nnoremap <silent><buffer> <C-W>gf :<C-U>call vimgoto#Find("\<lt>C-W>gF")<CR>
endif
" Let the matchit plugin know what items can be matched.
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1uluvh-00B2NC-6w%40256bit.org.