blob: a8467edd43f8ef2b91c86a0eadf33d43e0dac7bc [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>
Bram Moolenaarc08ee742019-12-05 22:47:25 +01004" Last Change: 2019 Dec 05
Bram Moolenaar8c8de832008-06-24 22:58:06 +00005
6if exists("b:current_syntax")
Bram Moolenaar7a329912010-05-21 12:05:36 +02007 finish
Bram Moolenaar8c8de832008-06-24 22:58:06 +00008endif
9
10syn case match
11syn sync minlines=50
12
13syn include @gitDiff syntax/diff.vim
14
15syn region gitHead start=/\%^/ end=/^$/
Bram Moolenaarc08ee742019-12-05 22:47:25 +010016syn region gitHead start=/\%(^commit\%( \x\{40\}\)\{1,\}\%(\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
Bram Moolenaarc08ee742019-12-05 22:47:25 +010028syn match gitDiffAdded "{+.*+}" contained containedin=gitDiff
Bram Moolenaar5c736222010-01-06 20:54:52 +010029syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
Bram Moolenaarc08ee742019-12-05 22:47:25 +010030syn match gitDiffRemoved "\[-.*-\]" contained containedin=gitDiff
Bram Moolenaar8c8de832008-06-24 22:58:06 +000031
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
Bram Moolenaarc08ee742019-12-05 22:47:25 +010035syn match gitMode /^\d\{6\}\>/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
Bram Moolenaar8c8de832008-06-24 22:58:06 +000036syn 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
Bram Moolenaar8c8de832008-06-24 22:58:06 +000039
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
Bram Moolenaar5c736222010-01-06 20:54:52 +010050syn match gitHash /\<\x\{40\}\>/ contained nextgroup=gitIdentity,gitStage,gitHash skipwhite
Bram Moolenaar8c8de832008-06-24 22:58:06 +000051syn match gitHash /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
Bram Moolenaar5c736222010-01-06 20:54:52 +010052syn match gitHashAbbrev /\<\x\{4,40\}\>/ contained nextgroup=gitHashAbbrev skipwhite
Bram Moolenaar8c8de832008-06-24 22:58:06 +000053syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
Bram Moolenaar5c736222010-01-06 20:54:52 +010054
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 /
Bram Moolenaar8c8de832008-06-24 22:58:06 +000059
60hi def link gitDateHeader gitIdentityHeader
61hi def link gitIdentityHeader gitIdentityKeyword
62hi def link gitIdentityKeyword Label
Bram Moolenaar5c736222010-01-06 20:54:52 +010063hi def link gitNotesHeader gitKeyword
Bram Moolenaar8c8de832008-06-24 22:58:06 +000064hi 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
Bram Moolenaar5c736222010-01-06 20:54:52 +010077hi def link gitDiffAdded diffAdded
78hi def link gitDiffRemoved diffRemoved
Bram Moolenaar8c8de832008-06-24 22:58:06 +000079
80let b:current_syntax = "git"