Merge branch 'MacVim'
[MacVim/KaoriYa.git] / runtime / syntax / git.vim
blobfeb70848a8f484ca64d998c36a8179123242fc1f
1 " Vim syntax file
2 " Language:     generic git output
3 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
4 " Last Change:  2009 Dec 24
6 if exists("b:current_syntax")
7     finish
8 endif
10 syn case match
11 syn sync minlines=50
13 syn include @gitDiff syntax/diff.vim
15 syn region gitHead start=/\%^/ end=/^$/
16 syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
18 " For git reflog and git show ...^{tree}, avoid sync issues
19 syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/
20 syn match gitHead /^\x\{40\} \x\{40}\t.*/
22 syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold
23 syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff
25 syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
26 syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
27 syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
28 syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
30 syn match  gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
31 syn match  gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
32 syn match  gitKeyword /^Merge:/  contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite
33 syn match  gitMode    /^\d\{6\}/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
34 syn match  gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
35 syn match  gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
36 syn match  gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite
38 syn match  gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite
39 syn match  gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite
40 syn match  gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity
42 syn 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
43 syn match  gitDate      /-\=\d\+ [+-]\d\d\d\d\>/               contained
44 syn match  gitDate      /\<\d\+ \l\+ ago\>/                    contained
45 syn match  gitType      /\<\%(tag\|commit\|tree\|blob\)\>/     contained nextgroup=gitHash skipwhite
46 syn match  gitStage     /\<\d\t\@=/                            contained
47 syn match  gitReference /\S\+\S\@!/                            contained
48 syn match  gitHash      /\<\x\{40\}\>/                         contained nextgroup=gitIdentity,gitStage,gitHash skipwhite
49 syn match  gitHash      /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
50 syn match  gitHashAbbrev /\<\x\{4,40\}\>/           contained nextgroup=gitHashAbbrev skipwhite
51 syn match  gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
53 syn match  gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite
54 syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity
56 syn match  gitNotesHeader /^Notes:\ze\n    /
58 hi def link gitDateHeader        gitIdentityHeader
59 hi def link gitIdentityHeader    gitIdentityKeyword
60 hi def link gitIdentityKeyword   Label
61 hi def link gitNotesHeader       gitKeyword
62 hi def link gitReflogHeader      gitKeyword
63 hi def link gitKeyword           Keyword
64 hi def link gitIdentity          String
65 hi def link gitEmailDelimiter    Delimiter
66 hi def link gitEmail             Special
67 hi def link gitDate              Number
68 hi def link gitMode              Number
69 hi def link gitHashAbbrev        gitHash
70 hi def link gitHash              Identifier
71 hi def link gitReflogMiddle      gitReference
72 hi def link gitReference         Function
73 hi def link gitStage             gitType
74 hi def link gitType              Type
75 hi def link gitDiffAdded         diffAdded
76 hi def link gitDiffRemoved       diffRemoved
78 let b:current_syntax = "git"