-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Loading status checks…
Merge remote-tracking branch 'upstream/master' into tabsidebar
Showing
20 changed files
with
372 additions
and
105 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,6 @@ | |
" Language: Vim script | ||
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com> | ||
" Doug Kearns <[email protected]> | ||
" URL: https://github.com/vim-jp/syntax-vim-ex | ||
" Last Change: 2024 Aug 30 | ||
" Former Maintainer: Charles E. Campbell | ||
|
||
|
@@ -185,10 +184,11 @@ syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSub | |
syn case match | ||
|
||
" All vimCommands are contained by vimIsCommand. {{{2 | ||
syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList | ||
syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDef,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList | ||
syn cluster vim9CmdList contains=vim9Const,vim9Final,vim9For,vim9Var | ||
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1 | ||
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand | ||
syn match vimBang contained "!" | ||
syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" | ||
syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" | ||
syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>" | ||
|
@@ -362,32 +362,44 @@ syn match vimSpecFileMod "\(:[phtre]\)\+" contained | |
" User-Specified Commands: {{{2 | ||
" ======================= | ||
syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange | ||
syn keyword vimUserCommand contained com[mand] | ||
syn match vimUserCmdName contained "\<\u\w*\>" nextgroup=vimUserCmdBlock skipwhite | ||
syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList,vimComFilter,vimCmdBlock,vimUserCmdName | ||
syn match vimUserAttrbError contained "-\a\+\ze\s" | ||
syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper | ||
syn match vimUserAttrb contained "-complete=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError | ||
syn match vimUserAttrb contained "-range\(=%\|=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey | ||
syn match vimUserAttrb contained "-count\(=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey | ||
syn match vimUserAttrb contained "-bang\>" contains=vimOper,vimUserAttrbKey | ||
syn match vimUserAttrb contained "-bar\>" contains=vimOper,vimUserAttrbKey | ||
syn match vimUserAttrb contained "-buffer\>" contains=vimOper,vimUserAttrbKey | ||
syn match vimUserAttrb contained "-register\>" contains=vimOper,vimUserAttrbKey | ||
syn keyword vimUserCmdKey contained com[mand] | ||
syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock | ||
syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter | ||
syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)" | ||
syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr | ||
syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey | ||
syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey | ||
syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey | ||
syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError | ||
syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey | ||
syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber | ||
syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey | ||
syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs | ||
syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey | ||
syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange | ||
syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey | ||
|
||
syn match vimUserCmdAttrNargs contained "[01*?+]" | ||
syn match vimUserCmdAttrRange contained "%" | ||
|
||
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror") | ||
syn match vimUserCmdError contained "\S\+\>" | ||
endif | ||
syn case ignore | ||
syn keyword vimUserAttrbKey contained bar ban[g] cou[nt] ra[nge] com[plete] n[args] re[gister] | ||
" GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt contained', END_STR='' | ||
syn keyword vimUserAttrbCmplt contained custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError | ||
syn match vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError | ||
|
||
syn case ignore | ||
syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister] | ||
" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR='' | ||
syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError | ||
syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError | ||
" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR='' | ||
syn match vimUserCmdAttrAddr contained "?" | ||
syn case match | ||
syn match vimUserAttrbCmplt contained "custom,\u\w*" | ||
|
||
syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList | ||
|
||
syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr | ||
syn match vimDelcommandAttr contained "-buffer\>" | ||
|
||
" Lower Priority Comments: after some vim commands... {{{2 | ||
" ======================= | ||
if get(g:, "vimsyn_comment_strings", 1) | ||
|
@@ -1162,6 +1174,8 @@ if !exists("skip_vim_syntax_inits") | |
hi def link vimDefComment vim9Comment | ||
hi def link vimDefKey vimCommand | ||
hi def link vimDefParam vimVar | ||
hi def link vimDelcommand vimCommand | ||
hi def link vimDelcommandAttr vimUserCmdAttr | ||
hi def link vimEcho vimCommand | ||
hi def link vimEchohlNone vimGroup | ||
hi def link vimEchohl vimCommand | ||
|
@@ -1319,13 +1333,15 @@ if !exists("skip_vim_syntax_inits") | |
hi def link vimUnlet vimCommand | ||
hi def link vimUnletBang vimBang | ||
hi def link vimUnmap vimMap | ||
hi def link vimUserAttrbCmpltFunc Special | ||
hi def link vimUserAttrbCmplt vimSpecial | ||
hi def link vimUserAttrbKey vimOption | ||
hi def link vimUserAttrb vimSpecial | ||
hi def link vimUserAttrbError Error | ||
hi def link vimUserCmdAttrAddr vimSpecial | ||
hi def link vimUserCmdAttrCmplt vimSpecial | ||
hi def link vimUserCmdAttrNargs vimSpecial | ||
hi def link vimUserCmdAttrRange vimSpecial | ||
hi def link vimUserCmdAttrKey vimUserCmdAttr | ||
hi def link vimUserCmdAttr Special | ||
hi def link vimUserCmdAttrError Error | ||
hi def link vimUserCmdError Error | ||
hi def link vimUserCommand vimCommand | ||
hi def link vimUserCmdKey vimCommand | ||
hi def link vimUserFunc Normal | ||
hi def link vimVar Identifier | ||
hi def link vimWarn WarningMsg | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,9 +2,10 @@ | |
" Language: sudoers(5) configuration files | ||
" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) | ||
" Previous Maintainer: Nikolai Weibull <[email protected]> | ||
" Latest Revision: 2021 Mar 15 | ||
" Latest Revision: 2024 Sep 02 | ||
" Recent Changes: Support for #include and #includedir. | ||
" Added many new options (Samuel D. Leslie) | ||
" Update allowed Tag_Spec Runas_Spec syntax items | ||
|
||
if exists("b:current_syntax") | ||
finish | ||
|
@@ -22,7 +23,7 @@ syn match sudoersUserSpec '^' nextgroup=@sudoersUserInSpec skipwhite | |
|
||
syn match sudoersSpecEquals contained '=' nextgroup=@sudoersCmndSpecList skipwhite | ||
|
||
syn cluster sudoersCmndSpecList contains=sudoersUserRunasBegin,sudoersPASSWD,@sudoersCmndInSpec | ||
syn cluster sudoersCmndSpecList contains=sudoersUserRunasBegin,sudoersTagSpec,@sudoersCmndInSpec | ||
|
||
syn keyword sudoersTodo contained TODO FIXME XXX NOTE | ||
|
||
|
@@ -92,10 +93,11 @@ syn cluster sudoersUserList contains=sudoersUserListComma,sudoersUserLis | |
syn match sudoersUserSpecComma contained ',' nextgroup=@sudoersUserInSpec skipwhite skipnl | ||
syn cluster sudoersUserSpec contains=sudoersUserSpecComma,@sudoersHostInSpec | ||
|
||
syn match sudoersUserRunasBegin contained '(' nextgroup=@sudoersUserInRunas skipwhite skipnl | ||
syn match sudoersUserRunasBegin contained '(' nextgroup=@sudoersUserInRunas,sudoersUserRunasColon skipwhite skipnl | ||
syn match sudoersUserRunasComma contained ',' nextgroup=@sudoersUserInRunas skipwhite skipnl | ||
syn match sudoersUserRunasEnd contained ')' nextgroup=sudoersPASSWD,@sudoersCmndInSpec skipwhite skipnl | ||
syn cluster sudoersUserRunas contains=sudoersUserRunasComma,@sudoersUserInRunas,sudoersUserRunasEnd | ||
syn match sudoersUserRunasColon contained ':' nextgroup=@sudoersUserInRunas skipwhite skipnl | ||
syn match sudoersUserRunasEnd contained ')' nextgroup=sudoersTagSpec,@sudoersCmndInSpec skipwhite skipnl | ||
syn cluster sudoersUserRunas contains=sudoersUserRunasComma,sudoersUserRunasColon,@sudoersUserInRunas,sudoersUserRunasEnd | ||
|
||
|
||
syn match sudoersHostAliasEquals contained '=' nextgroup=@sudoersHostInList skipwhite skipnl | ||
|
@@ -291,7 +293,7 @@ syn region sudoersStringValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup | |
syn match sudoersListValue contained '[^[:space:],:=\\]*\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersParameterListComma skipwhite skipnl | ||
syn region sudoersListValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup=sudoersParameterListComma skipwhite skipnl | ||
|
||
syn match sudoersPASSWD contained '\%(NO\)\=PASSWD:' nextgroup=@sudoersCmndInSpec skipwhite | ||
syn match sudoersTagSpec contained '\%(NO\)\=\%(EXEC\|FOLLOW\|LOG_\%(INPUT\|OUTPUT\)\|MAIL\|INTERCEPT\|PASSWD\|SETENV\):' nextgroup=sudoersTagSpec,@sudoersCmndInSpec skipwhite | ||
|
||
hi def link sudoersSpecEquals Operator | ||
hi def link sudoersTodo Todo | ||
|
@@ -345,6 +347,7 @@ hi def link sudoersUserListColon Delimiter | |
hi def link sudoersUserSpecComma Delimiter | ||
hi def link sudoersUserRunasBegin Delimiter | ||
hi def link sudoersUserRunasComma Delimiter | ||
hi def link sudoersUserRunasColon Delimiter | ||
hi def link sudoersUserRunasEnd Delimiter | ||
hi def link sudoersHostAliasEquals Operator | ||
hi def link sudoersHostListComma Delimiter | ||
|
@@ -381,7 +384,7 @@ hi def link sudoersListParameterEquals Operator | |
hi def link sudoersIntegerValue Number | ||
hi def link sudoersStringValue String | ||
hi def link sudoersListValue String | ||
hi def link sudoersPASSWD Special | ||
hi def link sudoersTagSpec Special | ||
hi def link sudoersInclude Statement | ||
|
||
let b:current_syntax = "sudoers" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,20 @@ | ||
>"+0#0000e05#ffffff0| |V|i|m| |:|c|o|m@1|a|n|d| |c|o|m@1|a|n|d| +0#0000000&@52 | ||
>"+0#0000e05#ffffff0| |V|i|m| |:|c|o|m@1|a|n|d|,| |:|d|e|l|c|o|m@1|a|n|d| |a|n|d| |:|c|o|m|c|l|e|a|r| |c|o|m@1|a|n|d|s| +0#0000000&@24 | ||
@75 | ||
|"+0#0000e05&| |I|s@1|u|e| |#|1|4|1|3|5| +0#0000000&@60 | ||
@75 | ||
|c+0#af5f00255&|o|m| +0#0000000&|F|o@1| |c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|y|s|t|e|m|(+0#0000000&|'+0#e000002&|l|s|'|)+0#0000000&| @49 | ||
|~+0#4040ff13&| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
|~| @73 | ||
| +0#0000000&@56|1|,|1| @10|A|l@1| | ||
|"+0#0000e05&| |l|i|s|t| +0#0000000&@68 | ||
@75 | ||
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@67 | ||
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F| @65 | ||
@75 | ||
|"+0#0000e05&| |d|e|f|i|n|e| +0#0000000&@66 | ||
@75 | ||
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@1|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 | ||
|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 | ||
|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@38 | ||
@75 | ||
|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@60 | ||
@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62 | ||
@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62 | ||
@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@62 | ||
|}+0#e000e06&| +0#0000000&@73 | ||
@57|1|,|1| @10|T|o|p| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
| +0&#ffffff0@74 | ||
|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@60 | ||
@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62 | ||
@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62 | ||
@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@62 | ||
>}+0#e000e06&| +0#0000000&@73 | ||
@75 | ||
|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| +0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| +0#0000000&|-+0#e000e06&|k|e@1 | ||
|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F|o@1| @35 | ||
@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 | ||
@75 | ||
|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|,+0#0000000&|C|o|m|p|l|e|t|e|r|1| |F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@23 | ||
|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|l|i|s|t|,+0#0000000&|C|o|m|p|l|e|t|e|r|2| |F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@19 | ||
@75 | ||
|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 | ||
@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1| |(|d|e|f|i|n|e|d| |i|n| |:|f|u|n|c|t|i|o|n|)|"| +0#0000000&@26 | ||
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 | ||
@75 | ||
|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|2|(+0#e000e06&|)| +0#0000000&@64 | ||
@57|1|9|,|1| @9|2|3|%| |
Oops, something went wrong.