mirror of https://github.com/vim/vim.git
patch 9.1.0354: runtime(uci): No support for uci file types
Problem: runtime(uci): No support for uci file types (Wu, Zhenyu) Solution: include basic uci ftplugin and syntax plugins (Colin Caine) closes: #14575 Co-authored-by: Wu, Zhenyu <wuzhenyu@ustc.edu> Signed-off-by: Colin Caine <complaints@cmcaine.co.uk> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
36e667ab83
commit
4b3fab14db
|
@ -1298,5 +1298,21 @@ export def FTvba()
|
|||
endif
|
||||
enddef
|
||||
|
||||
export def Detect_UCI_statements(): bool
|
||||
# Match a config or package statement at the start of the line.
|
||||
const config_or_package_statement = '^\s*\(\(c\|config\)\|\(p\|package\)\)\s\+\S'
|
||||
# Match a line that is either all blank or blank followed by a comment
|
||||
const comment_or_blank = '^\s*\(#.*\)\?$'
|
||||
|
||||
# Return true iff the file has a config or package statement near the
|
||||
# top of the file and all preceding lines were comments or blank.
|
||||
return getline(1) =~# config_or_package_statement
|
||||
\ || getline(1) =~# comment_or_blank
|
||||
\ && ( getline(2) =~# config_or_package_statement
|
||||
\ || getline(2) =~# comment_or_blank
|
||||
\ && getline(3) =~# config_or_package_statement
|
||||
\ )
|
||||
enddef
|
||||
|
||||
# Uncomment this line to check for compilation errors early
|
||||
# defcompile
|
||||
|
|
|
@ -3030,6 +3030,12 @@ au BufNewFile,BufRead {.,}tmux*.conf* setf tmux
|
|||
" Universal Scene Description
|
||||
au BufNewFile,BufRead *.usda,*.usd setf usd
|
||||
|
||||
" UCI
|
||||
" UCI files are normally in /etc/config, but that might be mounted over sshfs or similar, so we match more loosely.
|
||||
" There was some concern[1] that this pattern would match too much, so now we check the file content as well.
|
||||
" [1]: https://github.com/vim/vim/pull/14385#discussion_r1558878741
|
||||
au BufNewFile,BufRead */etc/config/* if dist#ft#Detect_UCI_statements() | call s:StarSetf('uci') | endif
|
||||
|
||||
" VHDL
|
||||
au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl')
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
" Vim ftplugin file
|
||||
" Language: OpenWrt Unified Configuration Interface
|
||||
" Maintainer: Colin Caine <complaints@cmcaine.co.uk>
|
||||
" Upstream: https://github.com/cmcaine/vim-uci
|
||||
" Last Change: 2024 Apr 17
|
||||
"
|
||||
" For more information on uci, see https://openwrt.org/docs/guide-user/base-system/uci
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
" UCI files are indented with tabs.
|
||||
setl noexpandtab
|
||||
setl shiftwidth=0
|
||||
setl softtabstop=0
|
||||
|
||||
setl commentstring=#\ %s
|
||||
|
||||
let b:undo_ftplugin = "setlocal et< cms< sts< sw<"
|
|
@ -0,0 +1,33 @@
|
|||
" Vim syntax file
|
||||
" Language: OpenWrt Unified Configuration Interface
|
||||
" Maintainer: Colin Caine <complaints@cmcaine.co.uk>
|
||||
" Upstream: https://github.com/cmcaine/vim-uci
|
||||
" Last Change: 2021 Sep 19
|
||||
"
|
||||
" For more information on uci, see https://openwrt.org/docs/guide-user/base-system/uci
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Fancy zero-width non-capturing look-behind to see what the last word was.
|
||||
" Would be really nice if there was some less obscure or more efficient way to
|
||||
" do this.
|
||||
syntax match uciOptionName '\%(\%(option\|list\)\s\+\)\@<=\S*'
|
||||
syntax match uciConfigName '\%(\%(package\|config\)\s\+\)\@<=\S*'
|
||||
syntax keyword uciConfigDec package config nextgroup=uciConfigName skipwhite
|
||||
syntax keyword uciOptionType option list nextgroup=uciOptionName skipwhite
|
||||
|
||||
" Standard matches.
|
||||
syntax match uciComment "#.*$"
|
||||
syntax region uciString start=+"+ end=+"+ skip=+\\"+
|
||||
syntax region uciString start=+'+ end=+'+ skip=+\\'+
|
||||
|
||||
highlight default link uciConfigName Identifier
|
||||
highlight default link uciOptionName Constant
|
||||
highlight default link uciConfigDec Statement
|
||||
highlight default link uciOptionType Type
|
||||
highlight default link uciComment Comment
|
||||
highlight default link uciString Normal
|
||||
|
||||
let b:current_syntax = "uci"
|
|
@ -2441,4 +2441,26 @@ func Test_def_file()
|
|||
filetype off
|
||||
endfunc
|
||||
|
||||
func Test_uci_file()
|
||||
filetype on
|
||||
|
||||
call mkdir('any/etc/config', 'pR')
|
||||
call writefile(['config firewall'], 'any/etc/config/firewall', 'D')
|
||||
split any/etc/config/firewall
|
||||
call assert_equal('uci', &filetype)
|
||||
bwipe!
|
||||
|
||||
call writefile(['# config for nginx here'], 'any/etc/config/firewall', 'D')
|
||||
split any/etc/config/firewall
|
||||
call assert_notequal('uci', &filetype)
|
||||
bwipe!
|
||||
|
||||
call writefile(['# Copyright Cool Cats 1997', 'config firewall'], 'any/etc/config/firewall', 'D')
|
||||
split any/etc/config/firewall
|
||||
call assert_equal('uci', &filetype)
|
||||
bwipe!
|
||||
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
|
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
354,
|
||||
/**/
|
||||
353,
|
||||
/**/
|
||||
|
|
Loading…
Reference in New Issue