xref: /vim-8.2.3635/runtime/syntax/git.vim (revision 818c9e7e)
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