1624
|
1 " Vim syntax file
|
|
2 " Language: generic git output
|
2034
|
3 " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
27036
|
4 " Last Change: 2022 Jan 05
|
1624
|
5
|
|
6 if exists("b:current_syntax")
|
2202
|
7 finish
|
1624
|
8 endif
|
|
9
|
|
10 syn case match
|
|
11 syn sync minlines=50
|
|
12
|
|
13 syn include @gitDiff syntax/diff.vim
|
|
14
|
27036
|
15 syn region gitHead start=/\%^\%(tag \|tree \|object \)\@=/ end=/^$/ contains=@NoSpell
|
|
16 syn region gitHead start=/\%(^commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ contains=@NoSpell
|
|
17 " git log --oneline
|
|
18 " minimize false positives by verifying contents of buffer
|
|
19 if getline(1) =~# '^\x\{7,\} ' && getline('$') =~# '^\x\{7,\} '
|
|
20 syn match gitHashAbbrev /^\x\{7,\} \@=/ contains=@NoSpell
|
|
21 elseif getline(1) =~# '^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \x\{7,\} '
|
|
22 syn match gitHashAbbrev /^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \zs\x\{7,\} \@=/ contains=@NoSpell
|
|
23 endif
|
|
24 " git log --graph
|
|
25 syn region gitGraph start=/\%(^[|\/\\_ ]*\*[|\/\\_ ]\{-\} commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^\%([|\/\\_ ]*$\)\@=/ contains=@NoSpell
|
|
26 " git blame --porcelain
|
|
27 syn region gitHead start=/\%(^\x\{40,\} \d\+ \d\+\%( \d\+\)\=$\)\@=/ end=/^\t\@=/ contains=@NoSpell
|
|
28 " git ls-tree
|
|
29 syn match gitMode /^\d\{6\}\%( \%(blob\|tree\) \x\{4,\}\t\)\@=/ nextgroup=gitType skipwhite contains=@NoSpell
|
|
30 " git ls-files --stage
|
|
31 syn match gitMode /^\d\{6\}\%( \x\{4,\} [0-3]\t\)\@=/ nextgroup=gitHashStage skipwhite contains=@NoSpell
|
|
32 " .git/HEAD, .git/refs/
|
|
33 syn match gitKeyword /\%^ref: \@=/ nextgroup=gitReference skipwhite contains=@NoSpell
|
|
34 syn match gitHash /\%^\x\{40,}\%$/ skipwhite contains=@NoSpell
|
|
35 " .git/logs/
|
|
36 syn match gitReflog /^\x\{40,\} \x\{40,\} .\{-\}\d\+\s-\d\{4\}\t.*/ skipwhite contains=@NoSpell,gitReflogOld
|
1624
|
37
|
2034
|
38 syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold
|
|
39 syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff
|
|
40
|
|
41 syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
|
|
42 syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
|
|
43 syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
|
27036
|
44 syn match gitDiffAdded "{+[^}]*+}" contained containedin=gitDiff
|
2034
|
45 syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
|
27036
|
46 syn match gitDiffRemoved "\[-[^]]*-\]" contained containedin=gitDiff
|
1624
|
47
|
27036
|
48 syn match gitKeyword /^commit \@=/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
|
|
49 syn match gitKeyword /^\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitHead nextgroup=gitHash skipwhite contains=@NoSpell
|
|
50 syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
|
|
51 syn match gitIdentityKeyword /^\%(author\|committer\|tagger\) \@=/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
|
|
52 syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
|
|
53 syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite contains=@NoSpell
|
|
54
|
|
55 syn match gitKeyword /^[*|\/\\_ ]\+\zscommit \@=/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
|
|
56 syn match gitKeyword /^[|\/\\_ ]\+\zs\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitGraph nextgroup=gitHash skipwhite contains=@NoSpell
|
|
57 syn match gitKeyword /^[|\/\\_ ]\+\zsMerge:/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
|
|
58 syn match gitIdentityKeyword /^[|\/\\_ ]\+\zs\%(author\|committer\|tagger\) \@=/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
|
|
59 syn match gitIdentityHeader /^[|\/\\_ ]\+\zs\%(Author\|Commit\|Tagger\):/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
|
|
60 syn match gitDateHeader /^[|\/\\_ ]\+\zs\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitGraph nextgroup=gitDate skipwhite contains=@NoSpell
|
1624
|
61
|
27036
|
62 syn match gitKeyword /^type \@=/ contained containedin=gitHead nextgroup=gitType skipwhite contains=@NoSpell
|
|
63 syn match gitKeyword /^\%(summary\|boundary\|filename\|\%(author\|committer\)-\%(time\|tz\)\) \@=/ contained containedin=gitHead skipwhite contains=@NoSpell
|
|
64 syn match gitKeyword /^tag \@=/ contained containedin=gitHead nextgroup=gitReference skipwhite contains=@NoSpell
|
|
65 syn match gitIdentityKeyword /^\%(author\|committer\)-mail \@=/ contained containedin=gitHead nextgroup=gitEmail skipwhite contains=@NoSpell
|
|
66 syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite contains=@NoSpell
|
|
67 syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite contains=@NoSpell
|
|
68 syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity contains=@NoSpell
|
1624
|
69
|
27036
|
70 syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite contains=@NoSpell
|
|
71 syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity contains=@NoSpell
|
|
72 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 contains=@NoSpell
|
|
73 syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained contains=@NoSpell
|
|
74 syn match gitDate /\<\d\+ \l\+ ago\>/ contained contains=@NoSpell
|
|
75 syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
|
|
76 syn match gitReference /\S\+\S\@!/ contained contains=@NoSpell
|
|
77 syn match gitHash /\<\x\{40,\}\>/ contained nextgroup=gitIdentity,gitHash skipwhite contains=@NoSpell
|
|
78 syn match gitReflogOld /^\x\{40,\} \@=/ contained nextgroup=gitReflogNew skipwhite contains=@NoSpell
|
|
79 syn match gitReflogNew /\<\x\{40,\} \@=/ contained nextgroup=gitIdentity skipwhite contains=@NoSpell
|
|
80 syn match gitHashAbbrev /\<\x\{4,\}\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
|
|
81 syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
|
|
82 syn match gitHashStage /\<\x\{4,\}\>/ contained nextgroup=gitStage skipwhite contains=@NoSpell
|
|
83 syn match gitStage /\<\d\t\@=/ contained contains=@NoSpell
|
2034
|
84
|
|
85
|
|
86 syn match gitNotesHeader /^Notes:\ze\n /
|
1624
|
87
|
|
88 hi def link gitDateHeader gitIdentityHeader
|
|
89 hi def link gitIdentityHeader gitIdentityKeyword
|
|
90 hi def link gitIdentityKeyword Label
|
2034
|
91 hi def link gitNotesHeader gitKeyword
|
1624
|
92 hi def link gitReflogHeader gitKeyword
|
|
93 hi def link gitKeyword Keyword
|
|
94 hi def link gitIdentity String
|
|
95 hi def link gitEmailDelimiter Delimiter
|
|
96 hi def link gitEmail Special
|
|
97 hi def link gitDate Number
|
|
98 hi def link gitMode Number
|
27036
|
99 hi def link gitHashStage gitHash
|
1624
|
100 hi def link gitHashAbbrev gitHash
|
27036
|
101 hi def link gitReflogOld gitHash
|
|
102 hi def link gitReflogNew gitHash
|
1624
|
103 hi def link gitHash Identifier
|
|
104 hi def link gitReflogMiddle gitReference
|
|
105 hi def link gitReference Function
|
|
106 hi def link gitStage gitType
|
|
107 hi def link gitType Type
|
2034
|
108 hi def link gitDiffAdded diffAdded
|
|
109 hi def link gitDiffRemoved diffRemoved
|
1624
|
110
|
|
111 let b:current_syntax = "git"
|