1" Vim syntax file 2" Language: generic git output 3" Maintainer: Tim Pope <[email protected]> 4" Last Change: 2019 Dec 05 5 6if exists("b:current_syntax") 7 finish 8endif 9 10syn case match 11syn sync minlines=50 12 13syn include @gitDiff syntax/diff.vim 14 15syn region gitHead start=/\%^/ end=/^$/ 16syn region gitHead start=/\%(^commit\%( \x\{40\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ 17 18" For git reflog and git show ...^{tree}, avoid sync issues 19syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/ 20syn match gitHead /^\x\{40\} \x\{40}\t.*/ 21 22syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold 23syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff 24 25syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff 26syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff 27syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge 28syn match gitDiffAdded "{+.*+}" contained containedin=gitDiff 29syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge 30syn match gitDiffRemoved "\[-.*-\]" contained containedin=gitDiff 31 32syn match gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite 33syn match gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite 34syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite 35syn match gitMode /^\d\{6\}\>/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite 36syn match gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite 37syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite 38syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite 39 40syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite 41syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite 42syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity 43 44syn 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 45syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained 46syn match gitDate /\<\d\+ \l\+ ago\>/ contained 47syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHash skipwhite 48syn match gitStage /\<\d\t\@=/ contained 49syn match gitReference /\S\+\S\@!/ contained 50syn match gitHash /\<\x\{40\}\>/ contained nextgroup=gitIdentity,gitStage,gitHash skipwhite 51syn match gitHash /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite 52syn match gitHashAbbrev /\<\x\{4,40\}\>/ contained nextgroup=gitHashAbbrev skipwhite 53syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite 54 55syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite 56syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity 57 58syn match gitNotesHeader /^Notes:\ze\n / 59 60hi def link gitDateHeader gitIdentityHeader 61hi def link gitIdentityHeader gitIdentityKeyword 62hi def link gitIdentityKeyword Label 63hi def link gitNotesHeader gitKeyword 64hi def link gitReflogHeader gitKeyword 65hi def link gitKeyword Keyword 66hi def link gitIdentity String 67hi def link gitEmailDelimiter Delimiter 68hi def link gitEmail Special 69hi def link gitDate Number 70hi def link gitMode Number 71hi def link gitHashAbbrev gitHash 72hi def link gitHash Identifier 73hi def link gitReflogMiddle gitReference 74hi def link gitReference Function 75hi def link gitStage gitType 76hi def link gitType Type 77hi def link gitDiffAdded diffAdded 78hi def link gitDiffRemoved diffRemoved 79 80let b:current_syntax = "git" 81