131 lines
3.6 KiB
VimL
131 lines
3.6 KiB
VimL
" 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 /"<CR>lv/"<CR>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 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 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 match justComment /\v#.*$/
|
|
|
|
syn match justShebang /\v^ *#!.*$/
|
|
|
|
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
|