xref: /vim-8.2.3635/runtime/syntax/git.vim (revision 5f1920ad)
1" Vim syntax file
2" Language:	generic git output
3" Maintainer:	Tim Pope <[email protected]>
4" Last Change:	2019 Dec 05
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\}\)\{1,\}\%(\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 gitDiffAdded "{+.*+}" contained containedin=gitDiff
29syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
30syn match gitDiffRemoved "\[-.*-\]" contained containedin=gitDiff
31
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
35syn match  gitMode    /^\d\{6\}\>/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
36syn 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
39
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
50syn match  gitHash      /\<\x\{40\}\>/                         contained nextgroup=gitIdentity,gitStage,gitHash skipwhite
51syn match  gitHash      /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
52syn match  gitHashAbbrev /\<\x\{4,40\}\>/           contained nextgroup=gitHashAbbrev skipwhite
53syn match  gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
54
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    /
59
60hi def link gitDateHeader        gitIdentityHeader
61hi def link gitIdentityHeader    gitIdentityKeyword
62hi def link gitIdentityKeyword   Label
63hi def link gitNotesHeader       gitKeyword
64hi 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
77hi def link gitDiffAdded         diffAdded
78hi def link gitDiffRemoved       diffRemoved
79
80let b:current_syntax = "git"
81