blob: feb70848a8f484ca64d998c36a8179123242fc1f [file] [log] [blame]
Bram Moolenaar8c8de832008-06-24 22:58:06 +00001" Vim syntax file
2" Language: generic git output
Bram Moolenaar5c736222010-01-06 20:54:52 +01003" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
4" Last Change: 2009 Dec 24
Bram Moolenaar8c8de832008-06-24 22:58:06 +00005
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=/^$/
Bram Moolenaar5c736222010-01-06 20:54:52 +010016syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
Bram Moolenaar8c8de832008-06-24 22:58:06 +000017
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
Bram Moolenaar5c736222010-01-06 20:54:52 +010022syn 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
Bram Moolenaar8c8de832008-06-24 22:58:06 +000029
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
Bram Moolenaar8c8de832008-06-24 22:58:06 +000037
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
Bram Moolenaar5c736222010-01-06 20:54:52 +010048syn match gitHash /\<\x\{40\}\>/ contained nextgroup=gitIdentity,gitStage,gitHash skipwhite
Bram Moolenaar8c8de832008-06-24 22:58:06 +000049syn match gitHash /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
Bram Moolenaar5c736222010-01-06 20:54:52 +010050syn match gitHashAbbrev /\<\x\{4,40\}\>/ contained nextgroup=gitHashAbbrev skipwhite
Bram Moolenaar8c8de832008-06-24 22:58:06 +000051syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
Bram Moolenaar5c736222010-01-06 20:54:52 +010052
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 /
Bram Moolenaar8c8de832008-06-24 22:58:06 +000057
58hi def link gitDateHeader gitIdentityHeader
59hi def link gitIdentityHeader gitIdentityKeyword
60hi def link gitIdentityKeyword Label
Bram Moolenaar5c736222010-01-06 20:54:52 +010061hi def link gitNotesHeader gitKeyword
Bram Moolenaar8c8de832008-06-24 22:58:06 +000062hi 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
Bram Moolenaar5c736222010-01-06 20:54:52 +010075hi def link gitDiffAdded diffAdded
76hi def link gitDiffRemoved diffRemoved
Bram Moolenaar8c8de832008-06-24 22:58:06 +000077
78let b:current_syntax = "git"