From 487dd1716a028efd0cc1bc1b4bfdc53b82688641 Mon Sep 17 00:00:00 2001 From: Shane-XB-Qian Date: Tue, 12 Aug 2025 21:14:58 +0200 Subject: [PATCH] runtime(vim): cannot jump to :colorscheme files Problem: cannot jump to :colorscheme files Solution: Let runtime/autoload/vim.vim handle :colorscheme lines closes: #17971 Signed-off-by: Shane-XB-Qian Signed-off-by: Christian Brabandt --- runtime/autoload/vim.vim | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/runtime/autoload/vim.vim b/runtime/autoload/vim.vim index 8dc14c4760..c517b756fe 100644 --- a/runtime/autoload/vim.vim +++ b/runtime/autoload/vim.vim @@ -1,5 +1,16 @@ vim9script +# Language: Vim9 script +# Contributers: @lacygoill +# Shane-XB-Qian +# Last Change: 2025 Aug 12 +# +# Vim Script to handle +# :import, :packadd and :colorscheme +# lines and allows to easily jump to it using gf +# +# see runtime/ftplugin/vim.vim + # Interface {{{1 export def Find(editcmd: string) #{{{2 var curline: string = getline('.') @@ -9,6 +20,11 @@ export def Find(editcmd: string) #{{{2 return endif + if curline =~ '^\s*\%(:\s*\)\=colo\%[rscheme]\s' + HandleColoLine(editcmd, curline) + return + endif + if curline =~ '^\s*\%(:\s*\)\=import\s' HandleImportLine(editcmd, curline) return @@ -51,6 +67,30 @@ def HandlePackaddLine(editcmd: string, curline: string) #{{{2 endif enddef +def HandleColoLine(editcmd: string, curline: string) #{{{2 + var pat: string = '^\s*colo\%[rscheme]\s\+\zs\S\+$' + var colo: string = curline->matchstr(pat) + + if colo == '' + try + execute 'normal! ' .. editcmd .. 'zv' + catch + Error(v:exception) + return + endtry + else + var split: string = editcmd[0] == 'g' ? 'edit' : editcmd[1] == 'g' ? 'tabedit' : 'split' + var files: list = getcompletion($'colors/{colo}', 'runtime') + ->map((_, fname: string) => fname->findfile(&rtp)->fnamemodify(':p')) + ->filter((_, path: string): bool => filereadable(path)) + if empty(files) + echo 'Could not find any colorscheme file for ' .. string(colo) + return + endif + files->Open(split) + endif +enddef + def HandleImportLine(editcmd: string, curline: string) #{{{2 var fname: string var import_cmd: string = '^\s*import\s\+\%(autoload\s\+\)\=' @@ -132,3 +172,5 @@ def Error(msg: string) #{{{2 echomsg msg echohl NONE enddef + +# vim: sw=4 et