" Vim syntax file " Language: Just Command Runner " Maintainer: Dan Buch " Latest Revision: 22 May 2021 if exists("b:current_syntax") finish endif let b:shell_name = "sh" let b:load_time_cursor = getpos('.') let b:debug = $JUST_VIM_DEBUG == 'enabled' function! s:justGetShellName() let lineno = 0 while lineno < line("$") let lineno += 1 let line = getline(lineno) let set_shell_match = "^ *set *shell *:" if matchstr(line, set_shell_match) == "" if b:debug echom "line number " . lineno . " does not match '" . set_shell_match . "': '" . line . "'" endif continue endif if b:debug echom "found matching line number " . lineno . ": " . line endif :normal /"lv/"h"ay:nohl let shell_name = @a if shell_name != "" if b:debug echom "returning shell_name: '" . shell_name . "'" endif return shell_name endif endwhile return "sh" endfunc function! s:justSetShellName(shell_name) try if b:debug echom "using shell name: '" . a:shell_name . "'" endif exe "syn include @setshellsyntax syntax/" . a:shell_name . ".vim" let b:shell_name = a:shell_name catch if b:debug echom "oh no: " v:exception echom "falling back to sh syntax" endif syn include @setshellsyntax syntax/sh.vim finally syn region justSubshell matchgroup=justBacktick start="\v\`" skip="\v\\\`" end="\v\`" contains=@setshellsyntax syn region justSubshell matchgroup=justBacktick start="\v\`\`\`" skip="\v\\\`" end="\v\`\`\`" contains=@setshellsyntax endtry endfunc call s:justSetShellName(s:justGetShellName()) delfunc s:justSetShellName delfunc s:justGetShellName syn keyword justKeyword alias export if else set syn keyword justFunction arch os os_family syn keyword justFunction env_var env_var_or_default invocation_directory syn keyword justFunction justfile justfile_directory just_executable syn keyword justSetting shell export dotenv-load positional-arguments syn match justOperator "\v:" syn match justOperator "\v\)" syn match justOperator "\v\(" syn match justOperator "\v\+" syn match justOperator "\v\@" syn match justOperator "\v\=" syn match justOperator "\v:\=" syn match justQuote '\v"' syn match justQuote "\v'" syn match justQuote '\v"""' syn match justQuote "\v'''" syn match justBacktick "\v\`" syn match justBacktick "\v\`\`\`" syn match justCurlyBrace "\v\{\{" syn match justCurlyBrace "\v\}\}" syn match justComment "\v#.*$" syn match justShebang "\v^ *#!.*$" syn match justPublicName "\v[a-zA-Z][_a-zA-Z0-9-]*[a-zA-Z0-9_]" syn match justPrivateName "\v_[a-zA-Z0-9][_a-zA-Z0-9-]*[a-zA-Z0-9_]" syn region justCurlyBraced matchgroup=justCurlyBrace start="\v\{\{" skip="\v\\\{" end="\v\}\}" contains=justKeyword,justFunction,justOperator,justQuote,justString,justRawString syn region justString matchgroup=justQuote start='\v"' skip='\v\\"' end='\v"' contains=justCurlyBraced syn region justString matchgroup=justQuote start='\v"""' skip='\v\\"' end='\v"""' contains=justCurlyBraced syn region justRawString matchgroup=justQuote start="\v'" end="\v'" syn region justRawString matchgroup=justQuote start="\v'''" end="\v'''" syn region justSubshell matchgroup=justBacktick start="\v\`" skip="\v\\\`" end="\v\`" contains=@setshellsyntax syn region justSubshell matchgroup=justBacktick start="\v\`\`\`" skip="\v\\\`" end="\v\`\`\`" contains=@setshellsyntax syn region justRecipeBody start="\v^ *" end="$" keepend contains=@setshellsyntax syn region justRecipeNoechoBody start="\v^ *\@" end="$" keepend contains=justOperator,@setshellsyntax hi def link justPublicName Identifier hi def link justPrivateName Identifier hi def link justKeyword Keyword hi def link justSetting Keyword hi def link justOperator Operator hi def link justComment Comment hi def link justShebang PreProc hi def link justFunction Function hi def link justQuote String hi def link justString String hi def link justRawString String hi def link justCurlyBrace Keyword hi def link justBacktick Special let b:current_syntax = "just" " vim:expandtab:ts=2:sts=2