blob: bf013ce195da72a1a53e2ccd243ea75ab3bacf8b [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 Moolenaar2f0936c2022-01-08 21:51:59 +00004" Last Change: 2022 Jan 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
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000015syn region gitHead start=/\%^\%(tag \|tree \|object \)\@=/ end=/^$/ contains=@NoSpell
16syn region gitHead start=/\%(^commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ contains=@NoSpell
17" git log --oneline
18" minimize false positives by verifying contents of buffer
19if getline(1) =~# '^\x\{7,\} ' && getline('$') =~# '^\x\{7,\} '
20 syn match gitHashAbbrev /^\x\{7,\} \@=/ contains=@NoSpell
21elseif getline(1) =~# '^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \x\{7,\} '
22 syn match gitHashAbbrev /^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \zs\x\{7,\} \@=/ contains=@NoSpell
23endif
24" git log --graph
25syn region gitGraph start=/\%(^[|\/\\_ ]*\*[|\/\\_ ]\{-\} commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^\%([|\/\\_ ]*$\)\@=/ contains=@NoSpell
26" git blame --porcelain
27syn region gitHead start=/\%(^\x\{40,\} \d\+ \d\+\%( \d\+\)\=$\)\@=/ end=/^\t\@=/ contains=@NoSpell
28" git ls-tree
29syn match gitMode /^\d\{6\}\%( \%(blob\|tree\) \x\{4,\}\t\)\@=/ nextgroup=gitType skipwhite contains=@NoSpell
30" git ls-files --stage
31syn match gitMode /^\d\{6\}\%( \x\{4,\} [0-3]\t\)\@=/ nextgroup=gitHashStage skipwhite contains=@NoSpell
32" .git/HEAD, .git/refs/
33syn match gitKeyword /\%^ref: \@=/ nextgroup=gitReference skipwhite contains=@NoSpell
34syn match gitHash /\%^\x\{40,}\%$/ skipwhite contains=@NoSpell
35" .git/logs/
36syn match gitReflog /^\x\{40,\} \x\{40,\} .\{-\}\d\+\s-\d\{4\}\t.*/ skipwhite contains=@NoSpell,gitReflogOld
Bram Moolenaar8c8de832008-06-24 22:58:06 +000037
Bram Moolenaar5c736222010-01-06 20:54:52 +010038syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold
39syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff
40
41syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
42syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
43syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000044syn match gitDiffAdded "{+[^}]*+}" contained containedin=gitDiff
Bram Moolenaar5c736222010-01-06 20:54:52 +010045syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000046syn match gitDiffRemoved "\[-[^]]*-\]" contained containedin=gitDiff
Bram Moolenaar8c8de832008-06-24 22:58:06 +000047
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000048syn match gitKeyword /^commit \@=/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
49syn match gitKeyword /^\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitHead nextgroup=gitHash skipwhite contains=@NoSpell
50syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
51syn match gitIdentityKeyword /^\%(author\|committer\|tagger\) \@=/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
52syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
53syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite contains=@NoSpell
Bram Moolenaar8c8de832008-06-24 22:58:06 +000054
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000055syn match gitKeyword /^[*|\/\\_ ]\+\zscommit \@=/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
56syn match gitKeyword /^[|\/\\_ ]\+\zs\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitGraph nextgroup=gitHash skipwhite contains=@NoSpell
57syn match gitKeyword /^[|\/\\_ ]\+\zsMerge:/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
58syn match gitIdentityKeyword /^[|\/\\_ ]\+\zs\%(author\|committer\|tagger\) \@=/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
59syn match gitIdentityHeader /^[|\/\\_ ]\+\zs\%(Author\|Commit\|Tagger\):/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
60syn match gitDateHeader /^[|\/\\_ ]\+\zs\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitGraph nextgroup=gitDate skipwhite contains=@NoSpell
Bram Moolenaar8c8de832008-06-24 22:58:06 +000061
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000062syn match gitKeyword /^type \@=/ contained containedin=gitHead nextgroup=gitType skipwhite contains=@NoSpell
63syn match gitKeyword /^\%(summary\|boundary\|filename\|\%(author\|committer\)-\%(time\|tz\)\) \@=/ contained containedin=gitHead skipwhite contains=@NoSpell
64syn match gitKeyword /^tag \@=/ contained containedin=gitHead nextgroup=gitReference skipwhite contains=@NoSpell
65syn match gitIdentityKeyword /^\%(author\|committer\)-mail \@=/ contained containedin=gitHead nextgroup=gitEmail skipwhite contains=@NoSpell
66syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite contains=@NoSpell
67syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite contains=@NoSpell
68syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity contains=@NoSpell
Bram Moolenaar5c736222010-01-06 20:54:52 +010069
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000070syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite contains=@NoSpell
71syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity contains=@NoSpell
72syn 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 contains=@NoSpell
73syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained contains=@NoSpell
74syn match gitDate /\<\d\+ \l\+ ago\>/ contained contains=@NoSpell
75syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
76syn match gitReference /\S\+\S\@!/ contained contains=@NoSpell
77syn match gitHash /\<\x\{40,\}\>/ contained nextgroup=gitIdentity,gitHash skipwhite contains=@NoSpell
78syn match gitReflogOld /^\x\{40,\} \@=/ contained nextgroup=gitReflogNew skipwhite contains=@NoSpell
79syn match gitReflogNew /\<\x\{40,\} \@=/ contained nextgroup=gitIdentity skipwhite contains=@NoSpell
80syn match gitHashAbbrev /\<\x\{4,\}\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
81syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
82syn match gitHashStage /\<\x\{4,\}\>/ contained nextgroup=gitStage skipwhite contains=@NoSpell
83syn match gitStage /\<\d\t\@=/ contained contains=@NoSpell
84
Bram Moolenaar5c736222010-01-06 20:54:52 +010085
86syn match gitNotesHeader /^Notes:\ze\n /
Bram Moolenaar8c8de832008-06-24 22:58:06 +000087
88hi def link gitDateHeader gitIdentityHeader
89hi def link gitIdentityHeader gitIdentityKeyword
90hi def link gitIdentityKeyword Label
Bram Moolenaar5c736222010-01-06 20:54:52 +010091hi def link gitNotesHeader gitKeyword
Bram Moolenaar8c8de832008-06-24 22:58:06 +000092hi def link gitReflogHeader gitKeyword
93hi def link gitKeyword Keyword
94hi def link gitIdentity String
95hi def link gitEmailDelimiter Delimiter
96hi def link gitEmail Special
97hi def link gitDate Number
98hi def link gitMode Number
Bram Moolenaar2f0936c2022-01-08 21:51:59 +000099hi def link gitHashStage gitHash
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000100hi def link gitHashAbbrev gitHash
Bram Moolenaar2f0936c2022-01-08 21:51:59 +0000101hi def link gitReflogOld gitHash
102hi def link gitReflogNew gitHash
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000103hi def link gitHash Identifier
104hi def link gitReflogMiddle gitReference
105hi def link gitReference Function
106hi def link gitStage gitType
107hi def link gitType Type
Bram Moolenaar5c736222010-01-06 20:54:52 +0100108hi def link gitDiffAdded diffAdded
109hi def link gitDiffRemoved diffRemoved
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000110
111let b:current_syntax = "git"