Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 1 | " Vim syntax file |
| 2 | " Language: generic git output |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 3 | " Maintainer: Tim Pope <vimNOSPAM@tpope.org> |
| 4 | " Last Change: 2009 Dec 24 |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 5 | |
| 6 | if exists("b:current_syntax") |
| 7 | finish |
| 8 | endif |
| 9 | |
| 10 | syn case match |
| 11 | syn sync minlines=50 |
| 12 | |
| 13 | syn include @gitDiff syntax/diff.vim |
| 14 | |
| 15 | syn region gitHead start=/\%^/ end=/^$/ |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 16 | syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 17 | |
| 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.*/ |
| 21 | |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 22 | syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold |
| 23 | syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff |
| 24 | |
| 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 |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 29 | |
| 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 |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 37 | |
| 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 |
| 41 | |
| 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 |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 48 | syn match gitHash /\<\x\{40\}\>/ contained nextgroup=gitIdentity,gitStage,gitHash skipwhite |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 49 | syn match gitHash /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 50 | syn match gitHashAbbrev /\<\x\{4,40\}\>/ contained nextgroup=gitHashAbbrev skipwhite |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 51 | syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 52 | |
| 53 | syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite |
| 54 | syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity |
| 55 | |
| 56 | syn match gitNotesHeader /^Notes:\ze\n / |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 57 | |
| 58 | hi def link gitDateHeader gitIdentityHeader |
| 59 | hi def link gitIdentityHeader gitIdentityKeyword |
| 60 | hi def link gitIdentityKeyword Label |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 61 | hi def link gitNotesHeader gitKeyword |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 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 |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 75 | hi def link gitDiffAdded diffAdded |
| 76 | hi def link gitDiffRemoved diffRemoved |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 77 | |
| 78 | let b:current_syntax = "git" |