gitcommit.vim (6618B)
1 " Vim syntax file 2 " Language: git commit file 3 " Maintainer: Tim Pope <vimNOSPAM@tpope.org> 4 " Filenames: *.git/COMMIT_EDITMSG 5 " Last Change: 2023 Dec 28 6 7 if exists("b:current_syntax") 8 finish 9 endif 10 11 scriptencoding utf-8 12 13 syn case match 14 syn sync minlines=50 15 syn sync linebreaks=1 16 17 if has("spell") 18 syn spell toplevel 19 endif 20 21 syn include @gitcommitDiff syntax/diff.vim 22 syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|@@\@!\|[^[:alnum:]\ +-]\S\@!\)\@=/ fold contains=@gitcommitDiff 23 24 if get(g:, 'gitcommit_summary_length') < 0 25 syn match gitcommitSummary "^.*$" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell 26 elseif get(g:, 'gitcommit_summary_length', 1) > 0 27 exe 'syn match gitcommitSummary "^.*\%<' . (get(g:, 'gitcommit_summary_length', 50) + 1) . 'v." contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell' 28 endif 29 syn match gitcommitOverflow ".*" contained contains=@Spell 30 syn match gitcommitBlank "^.\+" contained contains=@Spell 31 syn match gitcommitFirstLine "\%^.*" nextgroup=gitcommitBlank,gitcommitComment skipnl 32 33 let s:scissors = 0 34 let s:l = search('^[#;@!$%^&|:] -\{24,\} >8 -\{24,\}$', 'cnW', '', 100) 35 if s:l == 0 36 let s:l = line('$') 37 elseif getline(s:l)[0] !=# getline(s:l - 1)[0] 38 let s:scissors = 1 39 endif 40 let s:comment = escape((matchstr(getline(s:l), '^[#;@!$%^&|:]\S\@!') . '#')[0], '^$.*[]~\"/') 41 42 if s:scissors 43 let s:comment .= ' -\{24,\} >8 -\{24,\}$' 44 exe 'syn region gitcommitComment start="^' . s:comment . '" end="\%$" contains=gitcommitDiff' 45 else 46 exe 'syn match gitcommitComment "^' . s:comment . '.*"' 47 endif 48 exe 'syn match gitcommitTrailers "\n\@<=\n\%([[:alnum:]-]\+\s*:.*\|(cherry picked from commit .*\)\%(\n\s.*\|\n[[:alnum:]-]\+\s*:.*\|\n(cherry picked from commit .*\)*\%(\n\n*\%(' . s:comment . '\)\|\n*\%$\)\@="' 49 50 unlet s:l s:comment s:scissors 51 52 syn match gitcommitTrailerToken "^[[:alnum:]-]\+\s*:" contained containedin=gitcommitTrailers 53 54 syn match gitcommitHash "\<\x\{40,}\>" contains=@NoSpell display 55 syn match gitcommitOnBranch "\%(^. \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite 56 syn match gitcommitOnBranch "\%(^. \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite 57 syn match gitcommitBranch "[^ ']\+" contained 58 syn match gitcommitNoBranch "\%(^. \)\@<=Not currently on any branch." contained containedin=gitcommitComment 59 syn match gitcommitHeader "\%(^. \)\@<=\S.*[::]\%(\n^$\)\@!$" contained containedin=gitcommitComment 60 syn region gitcommitAuthor matchgroup=gitCommitHeader start=/\%(^. \)\@<=\%(Author\|Committer\|Date\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent 61 syn match gitcommitHeader "\%(^. \)\@<=commit\%( \x\{40,\}$\)\@=" contained containedin=gitcommitComment nextgroup=gitcommitHash skipwhite 62 syn match gitcommitNoChanges "\%(^. \)\@<=No changes$" contained containedin=gitcommitComment 63 64 syn match gitcommitType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained containedin=gitcommitComment nextgroup=gitcommitFile skipwhite 65 syn match gitcommitFile ".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitArrow 66 syn match gitcommitArrow " -> " contained nextgroup=gitcommitFile 67 syn match gitcommitUntrackedFile "\%(^.\t\)\@<=[^::/]*\%(/.*\)\=$" contained containedin=gitcommitComment 68 69 syn region gitcommitUntracked start=/^\z(.\) Untracked files:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader containedin=gitcommitComment containedin=gitcommitComment contained transparent fold 70 syn region gitcommitDiscarded start=/^\z(.\) Change\%(s not staged for commit\|d but not updated\):$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader,gitcommitDiscardedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold 71 syn region gitcommitSelected start=/^\z(.\) Changes to be committed:$/ end=/^\z1$\|^\z1\@!/ contains=gitcommitHeader,gitcommitSelectedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold 72 syn region gitcommitUnmerged start=/^\z(.\) Unmerged paths:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader,gitcommitUnmergedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold 73 74 syn match gitcommitUntrackedFile "\%(^.\t\)\@<=.*" contained containedin=gitcommitUntracked 75 76 syn match gitcommitDiscardedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained nextgroup=gitcommitDiscardedFile skipwhite 77 syn match gitcommitSelectedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained nextgroup=gitcommitSelectedFile skipwhite 78 syn match gitcommitUnmergedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained nextgroup=gitcommitUnmergedFile skipwhite 79 syn match gitcommitDiscardedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow 80 syn match gitcommitSelectedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow 81 syn match gitcommitUnmergedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitUnmergedArrow 82 syn match gitcommitDiscardedArrow " -> " contained nextgroup=gitcommitDiscardedFile 83 syn match gitcommitSelectedArrow " -> " contained nextgroup=gitcommitSelectedFile 84 syn match gitcommitUnmergedArrow " -> " contained nextgroup=gitcommitUnmergedFile 85 86 hi def link gitcommitSummary Keyword 87 hi def link gitcommitTrailerToken Label 88 hi def link gitcommitComment Comment 89 hi def link gitcommitHash Identifier 90 hi def link gitcommitOnBranch Comment 91 hi def link gitcommitBranch Special 92 hi def link gitcommitNoBranch gitCommitBranch 93 hi def link gitcommitDiscardedType gitcommitType 94 hi def link gitcommitSelectedType gitcommitType 95 hi def link gitcommitUnmergedType gitcommitType 96 hi def link gitcommitType Type 97 hi def link gitcommitNoChanges gitcommitHeader 98 hi def link gitcommitHeader PreProc 99 hi def link gitcommitUntrackedFile gitcommitFile 100 hi def link gitcommitDiscardedFile gitcommitFile 101 hi def link gitcommitSelectedFile gitcommitFile 102 hi def link gitcommitUnmergedFile gitcommitFile 103 hi def link gitcommitFile Constant 104 hi def link gitcommitDiscardedArrow gitcommitArrow 105 hi def link gitcommitSelectedArrow gitcommitArrow 106 hi def link gitcommitUnmergedArrow gitcommitArrow 107 hi def link gitcommitArrow gitcommitComment 108 "hi def link gitcommitOverflow Error 109 hi def link gitcommitBlank Error 110 111 let b:current_syntax = "gitcommit"