git.vim (7467B)
1 " Vim syntax file 2 " Language: generic git output 3 " Maintainer: Tim Pope <vimNOSPAM@tpope.org> 4 " Last Change: 2023 Dec 28 5 6 if exists("b:current_syntax") 7 finish 8 endif 9 10 syn case match 11 syn sync minlines=50 12 13 syn include @gitDiff syntax/diff.vim 14 15 syn region gitHead start=/\%^\%(tag \|tree \|object \)\@=/ end=/^$/ contains=@NoSpell 16 syn region gitHead start=/\%(^commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ contains=@NoSpell 17 " git log --oneline 18 " minimize false positives by verifying contents of buffer 19 if getline(1) =~# '^\x\{7,\} ' && getline('$') =~# '^\x\{7,\} ' 20 syn match gitHashAbbrev /^\x\{7,\} \@=/ contains=@NoSpell 21 elseif getline(1) =~# '^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \x\{7,\} ' 22 syn match gitHashAbbrev /^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \zs\x\{7,\} \@=/ contains=@NoSpell 23 endif 24 " git log --graph 25 syn region gitGraph start=/\%(^[|\/\\_ ]*\*[|\/\\_ ]\{-\} commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^\%([|\/\\_ ]*$\)\@=/ contains=@NoSpell 26 " git blame --porcelain 27 syn region gitHead start=/\%(^\x\{40,\} \d\+ \d\+\%( \d\+\)\=$\)\@=/ end=/^\t\@=/ contains=@NoSpell 28 " git ls-tree 29 syn match gitMode /^\d\{6\}\%( \%(blob\|tree\) \x\{4,\}\t\)\@=/ nextgroup=gitType skipwhite contains=@NoSpell 30 " git ls-files --stage 31 syn match gitMode /^\d\{6\}\%( \x\{4,\} [0-3]\t\)\@=/ nextgroup=gitHashStage skipwhite contains=@NoSpell 32 " .git/HEAD, .git/refs/ 33 syn match gitKeyword /\%^ref: \@=/ nextgroup=gitReference skipwhite contains=@NoSpell 34 syn match gitHash /\%^\x\{40,}\%$/ skipwhite contains=@NoSpell 35 " .git/logs/ 36 syn match gitReflog /^\x\{40,\} \x\{40,\} .\{-\}\d\+\s-\d\{4\}\t.*/ skipwhite contains=@NoSpell,gitReflogOld 37 38 syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold 39 syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff 40 41 syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold 42 syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff 43 syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge 44 syn match gitDiffAdded "{+[^}]*+}" contained containedin=gitDiff 45 syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge 46 syn match gitDiffRemoved "\[-[^]]*-\]" contained containedin=gitDiff 47 48 syn match gitKeyword /^commit \@=/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell 49 syn match gitKeyword /^\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitHead nextgroup=gitHash skipwhite contains=@NoSpell 50 syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell 51 syn match gitIdentityKeyword /^\%(author\|committer\|tagger\) \@=/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell 52 syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell 53 syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite contains=@NoSpell 54 55 syn match gitKeyword /^[*|\/\\_ ]\+\zscommit \@=/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell 56 syn match gitKeyword /^[|\/\\_ ]\+\zs\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitGraph nextgroup=gitHash skipwhite contains=@NoSpell 57 syn match gitKeyword /^[|\/\\_ ]\+\zsMerge:/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell 58 syn match gitIdentityKeyword /^[|\/\\_ ]\+\zs\%(author\|committer\|tagger\) \@=/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell 59 syn match gitIdentityHeader /^[|\/\\_ ]\+\zs\%(Author\|Commit\|Tagger\):/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell 60 syn match gitDateHeader /^[|\/\\_ ]\+\zs\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitGraph nextgroup=gitDate skipwhite contains=@NoSpell 61 62 syn match gitKeyword /^type \@=/ contained containedin=gitHead nextgroup=gitType skipwhite contains=@NoSpell 63 syn match gitKeyword /^\%(summary\|boundary\|filename\|\%(author\|committer\)-\%(time\|tz\)\) \@=/ contained containedin=gitHead skipwhite contains=@NoSpell 64 syn match gitKeyword /^tag \@=/ contained containedin=gitHead nextgroup=gitReference skipwhite contains=@NoSpell 65 syn match gitIdentityKeyword /^\%(author\|committer\)-mail \@=/ contained containedin=gitHead nextgroup=gitEmail skipwhite contains=@NoSpell 66 syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite contains=@NoSpell 67 syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite contains=@NoSpell 68 syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity contains=@NoSpell 69 70 syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite contains=@NoSpell 71 syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity contains=@NoSpell 72 syn match gitDate /\<\u\l\l \u\l\l \d\=\d \d\d:\d\d:\d\d \d\d\d\d [+-]\d\d\d\d/ contained contains=@NoSpell 73 syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained contains=@NoSpell 74 syn match gitDate /\<\d\+ \l\+ ago\>/ contained contains=@NoSpell 75 syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell 76 syn match gitReference /\S\+\S\@!/ contained contains=@NoSpell 77 syn match gitHash /\<\x\{40,\}\>/ contained nextgroup=gitIdentity,gitHash skipwhite contains=@NoSpell 78 syn match gitReflogOld /^\x\{40,\} \@=/ contained nextgroup=gitReflogNew skipwhite contains=@NoSpell 79 syn match gitReflogNew /\<\x\{40,\} \@=/ contained nextgroup=gitIdentity skipwhite contains=@NoSpell 80 syn match gitHashAbbrev /\<\x\{4,\}\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell 81 syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell 82 syn match gitHashStage /\<\x\{4,\}\>/ contained nextgroup=gitStage skipwhite contains=@NoSpell 83 syn match gitStage /\<\d\t\@=/ contained contains=@NoSpell 84 85 86 syn match gitNotesHeader /^Notes:\ze\n / 87 88 hi def link gitDateHeader gitIdentityHeader 89 hi def link gitIdentityHeader gitIdentityKeyword 90 hi def link gitIdentityKeyword Label 91 hi def link gitNotesHeader gitKeyword 92 hi def link gitReflogHeader gitKeyword 93 hi def link gitKeyword Keyword 94 hi def link gitIdentity String 95 hi def link gitEmailDelimiter Delimiter 96 hi def link gitEmail Special 97 hi def link gitDate Number 98 hi def link gitMode Number 99 hi def link gitHashStage gitHash 100 hi def link gitHashAbbrev gitHash 101 hi def link gitReflogOld gitHash 102 hi def link gitReflogNew gitHash 103 hi def link gitHash Identifier 104 hi def link gitReflogMiddle gitReference 105 hi def link gitReference Function 106 hi def link gitStage gitType 107 hi def link gitType Type 108 hi def link gitDiffAdded diffAdded 109 hi def link gitDiffRemoved diffRemoved 110 111 let b:current_syntax = "git"