| " Vim syntax file |
| " Language: Justfile |
| " Maintainer: Peter Benjamin <@pbnj> |
| " Last Change: 2025 Jan 25 |
| " Credits: The original author, Noah Bogart <https://github.com/NoahTheDuke/vim-just/> |
| |
| if exists('b:current_syntax') |
| finish |
| endif |
| |
| let s:cpo_save = &cpo |
| set cpo&vim |
| |
| let b:current_syntax = 'just' |
| |
| " syncing fromstart prevents mismatched highlighting when jumping around in a justfile |
| " linebreaks= keeps multi-line constructs highlighted correctly while typing |
| syn sync fromstart linebreaks=10 |
| |
| " a-zA-Z0-9_- |
| syn iskeyword @,48-57,_,- |
| |
| syn match justComment "#.*$" contains=@Spell,justCommentTodo |
| syn match justCommentInBody '#.*$' contained contains=justCommentTodo,justInterpolation,@justOtherCurlyBraces |
| syn keyword justCommentTodo TODO FIXME XXX contained |
| syn match justShebang "^\s*#!.*$" contains=justInterpolation,@justOtherCurlyBraces |
| syn match justName "\h\k*" contained |
| syn match justFunction "\h\k*" contained |
| |
| syn match justPreBodyComment "\v%(\s|\\\n)*%([^\\]\n)@3<!#%([^!].*)?\n%(\t+| +)@=" transparent contained contains=justComment |
| \ nextgroup=@justBodies skipnl |
| |
| syn region justBacktick start=/`/ end=/`/ |
| syn region justBacktick start=/```/ end=/```/ |
| syn region justRawString start=/'/ end=/'/ |
| syn region justRawString start=/'''/ end=/'''/ |
| syn region justString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError |
| syn region justString start=/"""/ skip=/\\\\\|\\"/ end=/"""/ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError |
| |
| syn region justShellExpandRawString start=/\v\k@1<!x'/ end=/'/ |
| \ contains=justShellExpandVarRaw,justDollarEscape |
| syn region justShellExpandRawString start=/\v\k@1<!x'''/ end=/'''/ |
| \ contains=justShellExpandVarRaw,justDollarEscape |
| syn region justShellExpandString |
| \ start=/\v\k@1<!x"/ skip=/\\\\\|\\"/ end=/"/ |
| \ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justShellExpandVar,justDollarEscape,justDollarEscapeSplit |
| syn region justShellExpandString |
| \ start=/\v\k@1<!x"""/ skip=/\\\\\|\\"/ end=/"""/ |
| \ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justShellExpandVar,justDollarEscape,justDollarEscapeSplit |
| |
| syn cluster justStringLiterals |
| \ contains=justRawString,justString,justShellExpandRawString,justShellExpandString |
| syn cluster justAllStrings contains=justBacktick,@justStringLiterals |
| |
| syn match justRegexReplacement |
| \ /\v,%(\_s|\\\n)*%('\_[^']*'|'''%(\_.%(''')@!)*\_.?''')%(\_s|\\\n)*%(,%(\_s|\\\n)*)?\)/me=e-1 |
| \ transparent contained contains=@justExpr,@justStringsWithRegexCapture |
| syn match justRegexReplacement |
| \ /\v,%(\_s|\\\n)*%("%(\_[^"]|\\")*"|"""%(\_.%(""")@!)*\_.?""")%(\_s|\\\n)*%(,%(\_s|\\\n)*)?\)/me=e-1 |
| \ transparent contained contains=@justExpr,@justStringsWithRegexCapture |
| |
| syn region justRawStrRegexRepl start=/\v'/ end=/'/ contained contains=justRegexCapture,justDollarEscape |
| syn region justRawStrRegexRepl start=/\v'''/ end=/'''/ contained contains=justRegexCapture,justDollarEscape |
| syn region justStringRegexRepl start=/\v"/ skip=/\\\\\|\\"/ end=/"/ contained contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justRegexCapture,justDollarEscape,justDollarEscapeSplit |
| syn region justStringRegexRepl start=/\v"""/ skip=/\\\\\|\\"/ end=/"""/ contained contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justRegexCapture,justDollarEscape,justDollarEscapeSplit |
| syn match justRegexCapture '\v\$%(\w+|\{\w+\})' contained |
| syn cluster justStringsWithRegexCapture contains=justRawStrRegexRepl,justStringRegexRepl |
| |
| syn cluster justRawStrings contains=justRawString,justRawStrRegexRepl |
| |
| syn region justStringInsideBody start=/\v\\@1<!'/ end=/'/ contained contains=justInterpolation,@justOtherCurlyBraces,justIndentError |
| syn region justStringInsideBody start=/\v\\@1<!"/ skip=/\v\\@1<!\\"/ end=/"/ contained contains=justInterpolation,@justOtherCurlyBraces,justIndentError |
| syn region justStringInShebangBody start=/\v\\@1<!'/ end=/'/ contained contains=justInterpolation,@justOtherCurlyBraces,justShebangIndentError |
| syn region justStringInShebangBody start=/\v\\@1<!"/ skip=/\v\\@1<!\\"/ end=/"/ contained contains=justInterpolation,@justOtherCurlyBraces,justShebangIndentError |
| |
| syn match justStringEscapeError '\\.' contained |
| syn match justStringEscapeSequence '\v\\[tnr"\\]' contained |
| syn match justStringUEscapeSequence '\v\\u\{[0-9A-Fa-f]{1,6}\}' contained |
| |
| syn match justAssignmentOperator "\V:=" contained |
| |
| syn region justExprParen start='\V(' end='\V)' transparent contains=@justExpr |
| syn region justExprParenInInterp start='\V(' end='\V)' transparent contained contains=@justExprInInterp |
| |
| syn match justRecipeAt "^@" contained |
| syn match justRecipeColon ":" contained |
| |
| syn region justRecipeAttributes |
| \ matchgroup=justRecipeAttr start='\v^%(\\\n)@3<!\[' end='\V]' |
| \ contains=justRecipeAttr,justRecipeAttrSep,justRecipeAttrArgs,justRecipeAttrArgError,justRecipeAttrValueShort |
| |
| syn keyword justRecipeAttr |
| \ confirm doc extension group linux macos no-cd no-exit-message no-quiet openbsd positional-arguments private script unix windows working-directory |
| \ contained |
| syn match justRecipeAttrSep ',' contained |
| syn match justRecipeAttrValueShort '\v:%(\_s|\\\n)*' transparent contained |
| \ contains=justRecipeAttrValueColon nextgroup=@justStringLiterals,justInvalidAttrValue |
| syn match justRecipeAttrValueColon '\V:' contained |
| syn region justRecipeAttrArgs matchgroup=justRecipeAttr start='\V(' end='\V)' contained |
| \ contains=@justStringLiterals |
| syn match justRecipeAttrArgError '\v\(%(\s|\\?\n)*\)' contained |
| |
| syn match justInvalidAttrValue '\v[^"',]["']@![^,\]]*' contained |
| |
| syn match justRecipeDeclSimple "\v^\@?\h\k*%(%(\s|\\\n)*:\=@!)@=" |
| \ transparent contains=justRecipeName |
| \ nextgroup=justRecipeNoDeps,justRecipeDeps |
| |
| syn region justRecipeDeclComplex start="\v^\@?\h\k*%(\s|\\\n)+%([+*$]+%(\s|\\\n)*)*\h" end="\v%(:\=@!)@=|$" |
| \ transparent |
| \ contains=justRecipeName,justParameter |
| \ nextgroup=justRecipeNoDeps,justRecipeDeps |
| |
| syn match justRecipeName "\v^\@?\h\k*" transparent contained contains=justRecipeAt,justFunction |
| |
| syn match justParameter "\v%(\s|\\\n)@3<=%(%([*+]%(\s|\\\n)*)?%(\$%(\s|\\\n)*)?|\$%(\s|\\\n)*[*+]%(\s|\\\n)*)\h\k*" |
| \ transparent contained |
| \ contains=justName,justVariadicPrefix,justParamExport,justVariadicPrefixError |
| \ nextgroup=justPreParamValue |
| |
| syn match justPreParamValue '\v%(\s|\\\n)*\=%(\s|\\\n)*' |
| \ contained transparent |
| \ contains=justParameterOperator |
| \ nextgroup=justParamValue |
| |
| syn region justParamValue contained transparent |
| \ start="\v\S" |
| \ skip="\\\n" |
| \ end="\v%(\s|^)%([*+$:]|\h)@=|:@=|$" |
| \ contains=@justAllStrings,justRecipeParenDefault,@justExprFunc |
| \ nextgroup=justParameterError |
| syn match justParameterOperator "\V=" contained |
| |
| syn match justVariadicPrefix "\v%(\s|\\\n)@3<=[*+]%(%(\s|\\\n)*\$?%(\s|\\\n)*\h)@=" contained |
| syn match justParamExport '\V$' contained |
| syn match justVariadicPrefixError "\v\$%(\s|\\\n)*[*+]" contained |
| |
| syn match justParameterError "\v%(%([+*$]+%(\s|\\\n)*)*\h\k*)@>%(%(\s|\\\n)*\=)@!" contained |
| |
| syn region justRecipeParenDefault |
| \ matchgroup=justRecipeDepParamsParen start='\v%(\=%(\s|\\\n)*)@<=\(' end='\V)' |
| \ contained |
| \ contains=@justExpr |
| syn match justRecipeSubsequentDeps '\V&&' contained |
| |
| syn match justRecipeNoDeps '\v:%(\s|\\\n)*\n|:#@=|:%(\s|\\\n)+#@=' |
| \ transparent contained |
| \ contains=justRecipeColon |
| \ nextgroup=justPreBodyComment,@justBodies |
| syn region justRecipeDeps start="\v:%(\s|\\\n)*%([a-zA-Z_(]|\&\&)" skip='\\\n' end="\v#@=|\\@1<!\n" |
| \ transparent contained |
| \ contains=justFunction,justRecipeColon,justRecipeSubsequentDeps,justRecipeParamDep |
| \ nextgroup=justPreBodyComment,@justBodies |
| |
| syn region justRecipeParamDep contained transparent |
| \ matchgroup=justRecipeDepParamsParen |
| \ start="\V(" |
| \ end="\V)" |
| \ contains=justRecipeDepParenName,@justExpr |
| |
| syn keyword justBoolean true false contained |
| |
| syn match justAssignment "\v^\h\k*%(\s|\\\n)*:\=" transparent contains=justAssignmentOperator |
| |
| syn match justSet '\v^set' contained |
| syn keyword justSetKeywords |
| \ allow-duplicate-recipes allow-duplicate-variables dotenv-load dotenv-filename dotenv-path dotenv-required export fallback ignore-comments positional-arguments quiet script-interpreter shell tempdir unstable windows-shell working-directory |
| \ contained |
| syn keyword justSetDeprecatedKeywords windows-powershell contained |
| syn match justBooleanSet "\v^set%(\s|\\\n)+%(allow-duplicate-%(recip|variabl)es|dotenv-%(loa|require)d|export|fallback|ignore-comments|positional-arguments|quiet|unstable|windows-powershell)%(%(\s|\\\n)*:\=%(\s|\\\n)*%(true|false))?%(\s|\\\n)*%($|#@=)" |
| \ contains=justSet,justSetKeywords,justSetDeprecatedKeywords,justAssignmentOperator,justBoolean |
| \ transparent |
| |
| syn match justStringSet '\v^set%(\s|\\\n)+\k+%(\s|\\\n)*:\=%(\s|\\\n)*%(x?['"])@=' transparent contains=justSet,justSetKeywords,justAssignmentOperator |
| |
| syn match justShellSet |
| \ "\v^set%(\s|\\\n)+%(s%(hell|cript-interpreter)|windows-shell)%(\s|\\\n)*:\=%(\s|\\\n)*\[@=" |
| \ contains=justSet,justSetKeywords,justAssignmentOperator |
| \ transparent skipwhite |
| \ nextgroup=justShellSetValue |
| syn region justShellSetValue |
| \ start='\V[' end='\V]' |
| \ contained |
| \ contains=@justStringLiterals,justShellSetError |
| |
| syn match justShellSetError '\v\k+['"]@!' contained |
| |
| syn match justAlias '\v^alias' contained |
| syn match justAliasDecl "\v^alias%(\s|\\\n)+\h\k*%(\s|\\\n)*:\=%(\s|\\\n)*" |
| \ transparent |
| \ contains=justAlias,justFunction,justAssignmentOperator |
| \ nextgroup=justAliasRes |
| syn match justAliasRes '\v\h\k*%(\s|\\\n)*%(#@=|$)' contained transparent contains=justFunction |
| |
| syn match justExportedAssignment "\v^export%(\s|\\\n)+\h\k*%(\s|\\\n)*:\=" transparent |
| \ contains=justExport,justAssignmentOperator |
| |
| syn match justExport '\v^export' contained |
| |
| syn match justUnexportStatement '\v^unexport%(\s|\\\n)+\w+\s*$' contains=justUnexport |
| syn match justUnexport '\v^unexport' contained |
| |
| syn keyword justConditional if else |
| syn region justConditionalBraces start="\v\{\{@!" end="\v\}@=" transparent contains=@justExpr |
| syn region justConditionalBracesInInterp start="\v\{\{@!" end="\v\}@=" transparent contained contains=@justExprInInterp |
| |
| syn match justLineLeadingSymbol "\v^%(\\\n)@3<!\s+\zs%(\@-|-\@|\@|-)" |
| |
| syn match justLineContinuation "\\$" |
| \ containedin=ALLBUT,justComment,justCommentInBody,justShebang,@justRawStrings,justRecipeAttrArgError,justShellExpandRawDefaultValue |
| |
| syn region justBody |
| \ start=/\v^\z( +|\t+)%(#!)@!\S/ |
| \ skip='\v\\\n|\n\s*$' |
| \ end="\v\n\z1@!|%(^\S)@2<=\_.@=" |
| \ contains=justInterpolation,@justOtherCurlyBraces,justLineLeadingSymbol,justCommentInBody,justStringInsideBody,justIndentError |
| \ contained |
| |
| syn region justShebangBody |
| \ start="\v^\z( +|\t+)#!" |
| \ skip='\v\\\n|\n\s*$' |
| \ end="\v\n\z1@!|%(^\S)@2<=\_.@=" |
| \ contains=justInterpolation,@justOtherCurlyBraces,justCommentInBody,justShebang,justStringInShebangBody,justShebangIndentError |
| \ contained |
| |
| syn cluster justBodies contains=justBody,justShebangBody |
| |
| syn match justIndentError '\v^%(\\\n)@3<!%( +\zs\t|\t+\zs )\s*\S@=' |
| syn match justShebangIndentError '\v^ +\zs\t\s*\S@=' |
| |
| syn region justInterpolation |
| \ matchgroup=justInterpolationDelim |
| \ start="\v\{\{\{@!" end="\v%(%(\\\n\s|\S)\s*)@<=\}\}|$" |
| \ matchgroup=justInterpError end='^\S' |
| \ contained |
| \ contains=@justExprInInterp |
| |
| syn match justBadCurlyBraces '\v\{{3}\ze[^{]' contained |
| syn match justCurlyBraces '\v\{{4}' contained |
| syn match justBadCurlyBraces '\v\{{5}\ze[^{]' contained |
| syn cluster justOtherCurlyBraces contains=justCurlyBraces,justBadCurlyBraces |
| |
| syn match justFunctionCall "\v\w+%(\s|\\\n)*\(@=" transparent contains=justBuiltInFunction |
| |
| " error() is intentionally not included in this list |
| syn keyword justBuiltInFunction |
| \ absolute_path append arch blake3 blake3_file cache_dir cache_directory canonicalize capitalize choose clean config_dir config_directory config_local_dir config_local_directory data_dir data_directory data_local_dir data_local_directory datetime datetime_utc encode_uri_component env env_var env_var_or_default executable_dir executable_directory extension file_name file_stem home_dir home_directory invocation_dir invocation_dir_native invocation_directory invocation_directory_native is_dependency join just_executable just_pid justfile justfile_dir justfile_directory kebabcase lowercamelcase lowercase module_dir module_directory module_file num_cpus os os_family parent_dir parent_directory path_exists prepend quote replace replace_regex semver_matches sha256 sha256_file shell shoutykebabcase shoutysnakecase snakecase source_dir source_directory source_file style titlecase trim trim_end trim_end_match trim_end_matches trim_start trim_start_match trim_start_matches uppercamelcase uppercase uuid without_extension |
| \ contained |
| |
| syn match justUserDefinedError "\v%(assert|error)%(%(\s|\\\n)*\()@=" |
| |
| syn match justReplaceRegex '\vreplace_regex%(\s|\\\n)*\(@=' transparent contains=justBuiltInFunction nextgroup=justReplaceRegexCall |
| syn match justReplaceRegexInInterp '\vreplace_regex%(\s|\\\n)*\(@=' transparent contained contains=justBuiltInFunction nextgroup=justReplaceRegexCallInInterp |
| |
| syn region justReplaceRegexCall |
| \ matchgroup=justReplaceRegexCall |
| \ start='\V(' end='\V)' |
| \ transparent contained |
| \ contains=@justExpr,justRegexReplacement |
| syn region justReplaceRegexCallInInterp |
| \ matchgroup=justReplaceRegexCall |
| \ start='\V(' end='\V)' |
| \ transparent contained |
| \ contains=@justExprInInterp,justRegexReplacement |
| |
| syn match justParameterLineContinuation '\v%(\s|\\\n)*' contained nextgroup=justParameterError |
| |
| syn match justRecipeDepParenName '\v%(\(\n?)@3<=%(\_s|\\\n)*\h\k*' |
| \ transparent contained |
| \ contains=justFunction |
| |
| syn cluster justBuiltInFunctions contains=justFunctionCall,justUserDefinedError |
| |
| syn match justConditionalOperator "\V==" |
| syn match justConditionalOperator "\V!=" |
| syn match justConditionalOperator "\V=~" |
| |
| syn match justOperator "\V+" |
| syn match justOperator "\V/" |
| syn match justOperator "\V&&" |
| syn match justOperator "\V||" |
| |
| syn keyword justConstant |
| \ HEX HEXLOWER HEXUPPER |
| \ CLEAR NORMAL BOLD ITALIC UNDERLINE INVERT HIDE STRIKETHROUGH |
| \ BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE |
| \ BG_BLACK BG_RED BG_GREEN BG_YELLOW BG_BLUE BG_MAGENTA BG_CYAN BG_WHITE |
| |
| syn match justShellExpandVarRaw '\v\$%(\{\_[^}]*\}|\w+)' contained contains=justShellExpandRawDefaultDelimiter |
| syn match justShellExpandRawDefaultDelimiter '\V:-' contained nextgroup=justShellExpandRawDefaultValue |
| syn match justShellExpandRawDefaultValue '\v\_[^}]*' contained |
| syn match justShellExpandVar '\v\$%(\w|\\\n\s*)+' contained |
| syn region justShellExpandVar start='\v\$%(\\\n\s*)*\{' end='\V}' contains=justShellExpandDefaultDelimiter,justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError |
| syn match justShellExpandDefaultDelimiter '\v:%(\\\n\s*)*-@=' contained nextgroup=justShellExpandDefault |
| syn region justShellExpandDefault |
| \ matchgroup=justShellExpandDefaultDelimiter start='\V-' end='\v\}@=' |
| \ contained |
| \ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError |
| |
| syn match justDollarEscape '\V$$' contained |
| syn match justDollarEscapeSplit '\v\$%(\\\n\s*)*\$' contained |
| |
| syn cluster justExprBase contains=@justAllStrings,@justBuiltInFunctions,justConditional,justConditionalOperator,justOperator,justConstant |
| syn cluster justExpr contains=@justExprBase,justExprParen,justConditionalBraces,justReplaceRegex |
| syn cluster justExprInInterp contains=@justExprBase,justName,justExprParenInInterp,justConditionalBracesInInterp,justReplaceRegexInInterp |
| |
| syn cluster justExprFunc contains=@justBuiltInFunctions,justReplaceRegex,justExprParen |
| |
| syn match justImport /\v^import%(%(\s|\\\n)*\?|%(\s|\\\n)+%(x?['"])@=)/ transparent |
| \ contains=justImportStatement,justOptionalFile |
| syn match justImportStatement '^import' contained |
| |
| syn match justOldInclude "^!include" |
| |
| syn match justModule /\v^mod%(%(\s|\\\n)*\?)?%(\s|\\\n)+\h\k*\s*%($|%(\s|\\\n)*%(x?['"]|#)@=)/ |
| \ transparent contains=justModStatement,justName,justOptionalFile |
| syn match justModStatement '^mod' contained |
| |
| syn match justOptionalFile '\V?' contained |
| |
| " Most linked colorscheme colors are chosen based on semantics of the color name. |
| " Some are for parity with other syntax files (for example, Number for recipe body highlighting |
| " is to align with the make.vim distributed with Vim). |
| " Deprecated `just` syntaxes are highlighted as Underlined. |
| " |
| " Colors are linked 'def'(ault) so that users who prefer other colors |
| " can override them, e.g. in ~/.vim/after/syntax/just.vim |
| " |
| " Note that vim-just's highlight groups are an implementation detail and may be subject to change. |
| |
| " The list of highlight links is sorted alphabetically. |
| |
| hi def link justAlias Statement |
| hi def link justAssignmentOperator Operator |
| hi def link justBacktick Special |
| hi def link justBadCurlyBraces Error |
| hi def link justBody Number |
| hi def link justBoolean Boolean |
| hi def link justBuiltInFunction Function |
| hi def link justComment Comment |
| hi def link justCommentInBody Comment |
| hi def link justCommentTodo Todo |
| hi def link justConditional Conditional |
| hi def link justConditionalOperator Conditional |
| hi def link justConstant Constant |
| hi def link justCurlyBraces Special |
| hi def link justDollarEscape Special |
| hi def link justDollarEscapeSplit Special |
| hi def link justExport Statement |
| hi def link justFunction Function |
| hi def link justImportStatement Include |
| hi def link justIndentError Error |
| hi def link justInterpError Error |
| hi def link justInterpolation Normal |
| hi def link justInterpolationDelim Delimiter |
| hi def link justInvalidAttrValue Error |
| hi def link justLineContinuation Special |
| hi def link justLineLeadingSymbol Special |
| hi def link justModStatement Keyword |
| hi def link justName Identifier |
| hi def link justOldInclude Error |
| hi def link justOperator Operator |
| hi def link justOptionalFile Conditional |
| hi def link justParameterError Error |
| hi def link justParameterOperator Operator |
| hi def link justParamExport Statement |
| hi def link justRawString String |
| hi def link justRawStrRegexRepl String |
| hi def link justRecipeAt Special |
| hi def link justRecipeAttr Type |
| hi def link justRecipeAttrArgError Error |
| hi def link justRecipeAttrSep Operator |
| hi def link justRecipeAttrValueColon Operator |
| hi def link justRecipeColon Operator |
| hi def link justRecipeDepParamsParen Delimiter |
| hi def link justRecipeSubsequentDeps Delimiter |
| hi def link justRegexCapture Identifier |
| hi def link justSet Statement |
| hi def link justSetDeprecatedKeywords Underlined |
| hi def link justSetKeywords Keyword |
| hi def link justShebang SpecialComment |
| hi def link justShebangBody Number |
| hi def link justShebangIndentError Error |
| hi def link justShellExpandDefault Character |
| hi def link justShellExpandDefaultDelimiter Operator |
| hi def link justShellExpandRawDefaultDelimiter Operator |
| hi def link justShellExpandRawDefaultValue Character |
| hi def link justShellExpandRawString String |
| hi def link justShellExpandString String |
| hi def link justShellExpandVar PreProc |
| hi def link justShellExpandVarRaw PreProc |
| hi def link justShellSetError Error |
| hi def link justString String |
| hi def link justStringEscapeError Error |
| hi def link justStringEscapeSequence Special |
| hi def link justStringInShebangBody String |
| hi def link justStringInsideBody String |
| hi def link justStringRegexRepl String |
| hi def link justStringUEscapeSequence Special |
| hi def link justUnexport Statement |
| hi def link justUserDefinedError Exception |
| hi def link justVariadicPrefix Statement |
| hi def link justVariadicPrefixError Error |
| |
| let &cpo = s:cpo_save |
| unlet s:cpo_save |