blob: fd76b7316bbc9a03d41411951943a29064a9512b [file] [log] [blame]
Bram Moolenaar8c8de832008-06-24 22:58:06 +00001" Vim syntax file
2" Language: generic git output
3" Maintainer: Tim Pope <vimNOSPAM@tpope.info>
4" Last Change: 2008 Mar 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\}$\)\@=/ 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 --git \|$\)\@=/ contains=@gitDiff fold
23syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --git \|$\)\@=/ contains=@gitDiff
24
25syn match gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
26syn match gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
27syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite
28syn match gitMode /^\d\{6\}/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
29syn match gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
30syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
31syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite
32syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite
33syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity
34
35syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite
36syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite
37syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity
38
39syn 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
40syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained
41syn match gitDate /\<\d\+ \l\+ ago\>/ contained
42syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHash skipwhite
43syn match gitStage /\<\d\t\@=/ contained
44syn match gitReference /\S\+\S\@!/ contained
45syn match gitHash /\<\x\{40\}\>/ contained nextgroup=gitIdentity,gitStage skipwhite
46syn match gitHash /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
47syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
48syn match gitHashAbbrev /\<\x\{40\}\>/ contained nextgroup=gitHashAbbrev skipwhite
49
50hi def link gitDateHeader gitIdentityHeader
51hi def link gitIdentityHeader gitIdentityKeyword
52hi def link gitIdentityKeyword Label
53hi def link gitReflogHeader gitKeyword
54hi def link gitKeyword Keyword
55hi def link gitIdentity String
56hi def link gitEmailDelimiter Delimiter
57hi def link gitEmail Special
58hi def link gitDate Number
59hi def link gitMode Number
60hi def link gitHashAbbrev gitHash
61hi def link gitHash Identifier
62hi def link gitReflogMiddle gitReference
63hi def link gitReference Function
64hi def link gitStage gitType
65hi def link gitType Type
66
67let b:current_syntax = "git"