1" Vim syntax file 2" Language: generic git output 3" Maintainer: Tim Pope <[email protected]> 4" Last Change: 2010 May 21 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\}\%(\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 gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge 29 30syn match gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite 31syn match gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite 32syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite 33syn match gitMode /^\d\{6\}/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite 34syn match gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite 35syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite 36syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite 37 38syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite 39syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite 40syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity 41 42syn 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 43syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained 44syn match gitDate /\<\d\+ \l\+ ago\>/ contained 45syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHash skipwhite 46syn match gitStage /\<\d\t\@=/ contained 47syn match gitReference /\S\+\S\@!/ contained 48syn match gitHash /\<\x\{40\}\>/ contained nextgroup=gitIdentity,gitStage,gitHash skipwhite 49syn match gitHash /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite 50syn match gitHashAbbrev /\<\x\{4,40\}\>/ contained nextgroup=gitHashAbbrev skipwhite 51syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite 52 53syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite 54syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity 55 56syn match gitNotesHeader /^Notes:\ze\n / 57 58hi def link gitDateHeader gitIdentityHeader 59hi def link gitIdentityHeader gitIdentityKeyword 60hi def link gitIdentityKeyword Label 61hi def link gitNotesHeader gitKeyword 62hi def link gitReflogHeader gitKeyword 63hi def link gitKeyword Keyword 64hi def link gitIdentity String 65hi def link gitEmailDelimiter Delimiter 66hi def link gitEmail Special 67hi def link gitDate Number 68hi def link gitMode Number 69hi def link gitHashAbbrev gitHash 70hi def link gitHash Identifier 71hi def link gitReflogMiddle gitReference 72hi def link gitReference Function 73hi def link gitStage gitType 74hi def link gitType Type 75hi def link gitDiffAdded diffAdded 76hi def link gitDiffRemoved diffRemoved 77 78let b:current_syntax = "git" 79