patch 9.1.0778: filetype: lf config files are not recognized

Problem:  filetype: lf config files are not recognized
Solution: detect lfrc files as lf filetype, include a syntax
          script for lf files (Andis Spriņķis).

References:
- https://github.com/gokcehan/lf

closes: #15859

Signed-off-by: Andis Spriņķis <spr.andis@protonmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Andis Spriņķis
2024-10-13 19:29:56 +02:00
committed by Christian Brabandt
parent f64bafd98a
commit 0f146b7925
7 changed files with 262 additions and 1 deletions

236
runtime/syntax/lf.vim Normal file
View File

@ -0,0 +1,236 @@
" Vim syntax file
" Language: lf file manager configuration file (lfrc)
" Maintainer: Andis Sprinkis <andis@sprinkis.com>
" Former Maintainer: Cameron Wright
" Former URL: https://github.com/andis-sprinkis/lf-vim
" Last Change: 13 October 2024
"
" The shell syntax highlighting is configurable. See $VIMRUNTIME/doc/syntax.txt
" lf version: 32
if exists("b:current_syntax")
finish
endif
let b:current_syntax = "lf"
"{{{ Comment Matching
syn match lfComment '#.*$'
"}}}
"{{{ String Matching
syn match lfString "'.*'"
syn match lfString '".*"' contains=lfVar,lfSpecial
"}}}
"{{{ Match lf Variables
syn match lfVar '\$f\|\$fx\|\$fs\|\$id'
"}}}
"{{{ Keywords
syn keyword lfKeyword set setlocal cmd map cmap skipwhite
"}}}
"{{{ Options Keywords
syn keyword lfOptions
\ quit
\ up
\ half-up
\ page-up
\ scroll-up
\ down
\ half-down
\ page-down
\ scroll-down
\ updir
\ open
\ jump-next
\ jump-prev
\ top
\ bottom
\ high
\ middle
\ low
\ toggle
\ invert
\ invert-below
\ unselect
\ glob-select
\ glob-unselect
\ calcdirsize
\ clearmaps
\ copy
\ cut
\ paste
\ clear
\ sync
\ draw
\ redraw
\ load
\ reload
\ echo
\ echomsg
\ echoerr
\ cd
\ select
\ delete
\ rename
\ source
\ push
\ read
\ shell
\ shell-pipe
\ shell-wait
\ shell-async
\ find
\ find-back
\ find-next
\ find-prev
\ search
\ search-back
\ search-next
\ search-prev
\ filter
\ setfilter
\ mark-save
\ mark-load
\ mark-remove
\ tag
\ tag-toggle
\ cmd-escape
\ cmd-complete
\ cmd-menu-complete
\ cmd-menu-complete-back
\ cmd-menu-accept
\ cmd-enter
\ cmd-interrupt
\ cmd-history-next
\ cmd-history-prev
\ cmd-left
\ cmd-right
\ cmd-home
\ cmd-end
\ cmd-delete
\ cmd-delete-back
\ cmd-delete-home
\ cmd-delete-end
\ cmd-delete-unix-word
\ cmd-yank
\ cmd-transpose
\ cmd-transpose-word
\ cmd-word
\ cmd-word-back
\ cmd-delete-word
\ cmd-delete-word-back
\ cmd-capitalize-word
\ cmd-uppercase-word
\ cmd-lowercase-word
\ anchorfind
\ autoquit
\ borderfmt
\ cleaner
\ copyfmt
\ cursoractivefmt
\ cursorparentfmt
\ cursorpreviewfmt
\ cutfmt
\ dircache
\ dircounts
\ dirfirst
\ dironly
\ dirpreviews
\ drawbox
\ dupfilefmt
\ errorfmt
\ filesep
\ findlen
\ globfilter
\ globsearch
\ hidden
\ hiddenfiles
\ hidecursorinactive
\ history
\ icons
\ ifs
\ ignorecase
\ ignoredia
\ incfilter
\ incsearch
\ info
\ infotimefmtnew
\ infotimefmtold
\ mouse
\ number
\ numberfmt
\ period
\ preserve
\ preview
\ previewer
\ promptfmt
\ ratios
\ relativenumber
\ reverse
\ roundbox
\ ruler
\ rulerfmt
\ scrolloff
\ selectfmt
\ selmode
\ shell
\ shellflag
\ shellopts
\ sixel
\ smartcase
\ smartdia
\ sortby
\ statfmt
\ tabstop
\ tagfmt
\ tempmarks
\ timefmt
\ truncatechar
\ truncatepct
\ waitmsg
\ wrapscan
\ wrapscroll
\ pre-cd
\ on-cd
\ on-select
\ on-redraw
\ on-quit
"}}}
"{{{ Special Matching
syn match lfSpecial '<.*>\|\\.'
"}}}
"{{{ Shell Script Matching for cmd
let s:shell_syntax = get(g:, 'lf_shell_syntax', "syntax/sh.vim")
let s:shell_syntax = get(b:, 'lf_shell_syntax', s:shell_syntax)
unlet b:current_syntax
exe 'syn include @Shell '.s:shell_syntax
let b:current_syntax = "lf"
syn region lfIgnore start=".{{\n" end="^}}"
\ keepend contains=lfExternalShell,lfExternalPatch
syn match lfShell '\$[a-zA-Z].*$
\\|:[a-zA-Z].*$
\\|%[a-zA-Z].*$
\\|![a-zA-Z].*$
\\|&[a-zA-Z].*$'
\ transparent contains=@Shell,lfExternalPatch
syn match lfExternalShell "^.*$" transparent contained contains=@Shell
syn match lfExternalPatch "^\s*cmd\ .*\ .{{$\|^}}$" contained
"}}}
"{{{ Link Highlighting
hi def link lfComment Comment
hi def link lfVar Type
hi def link lfSpecial Special
hi def link lfString String
hi def link lfKeyword Statement
hi def link lfOptions Constant
hi def link lfConstant Constant
hi def link lfExternalShell Normal
hi def link lfExternalPatch Special
hi def link lfIgnore Special
"}}}