]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(vim): cannot jump to :colorscheme files
authorShane-XB-Qian <shane.qian@foxmail.com>
Tue, 12 Aug 2025 19:14:58 +0000 (21:14 +0200)
committerChristian Brabandt <cb@256bit.org>
Tue, 12 Aug 2025 19:16:28 +0000 (21:16 +0200)
Problem:  cannot jump to :colorscheme files
Solution: Let runtime/autoload/vim.vim handle :colorscheme lines

closes: #17971

Signed-off-by: Shane-XB-Qian <shane.qian@foxmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/vim.vim

index 8dc14c476026ecc4f820d8511b26b35adc8fc581..c517b756fe67230cfec1b997b9018f9b257cde03 100644 (file)
@@ -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<string> = 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