1
0
Fork 0
mirror of https://github.com/vim/vim synced 2025-03-22 17:55:10 +01:00
vim/runtime/syntax/gitcommit.vim

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

112 lines
6.5 KiB
VimL
Raw Permalink Normal View History

2008-06-24 22:58:06 +00:00
" Vim syntax file
" Language: git commit file
2010-01-06 20:54:52 +01:00
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
2008-06-24 22:58:06 +00:00
" Filenames: *.git/COMMIT_EDITMSG
" Last Change: 2023 Dec 28
2008-06-24 22:58:06 +00:00
if exists("b:current_syntax")
2010-05-21 12:05:36 +02:00
finish
2008-06-24 22:58:06 +00:00
endif
2022-01-08 21:51:59 +00:00
scriptencoding utf-8
2008-06-24 22:58:06 +00:00
syn case match
syn sync minlines=50
2022-01-08 21:51:59 +00:00
syn sync linebreaks=1
2008-06-24 22:58:06 +00:00
if has("spell")
2010-05-21 12:05:36 +02:00
syn spell toplevel
2008-06-24 22:58:06 +00:00
endif
syn include @gitcommitDiff syntax/diff.vim
2022-01-08 21:51:59 +00:00
syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|@@\@!\|[^[:alnum:]\ +-]\S\@!\)\@=/ fold contains=@gitcommitDiff
2008-06-24 22:58:06 +00:00
if get(g:, 'gitcommit_summary_length') < 0
syn match gitcommitSummary "^.*$" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
elseif get(g:, 'gitcommit_summary_length', 1) > 0
exe 'syn match gitcommitSummary "^.*\%<' . (get(g:, 'gitcommit_summary_length', 50) + 1) . 'v." contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell'
endif
2008-06-24 22:58:06 +00:00
syn match gitcommitOverflow ".*" contained contains=@Spell
2022-01-08 21:51:59 +00:00
syn match gitcommitBlank "^.\+" contained contains=@Spell
syn match gitcommitFirstLine "\%^.*" nextgroup=gitcommitBlank,gitcommitComment skipnl
let s:scissors = 0
let s:l = search('^[#;@!$%^&|:] -\{24,\} >8 -\{24,\}$', 'cnW', '', 100)
if s:l == 0
let s:l = line('$')
elseif getline(s:l)[0] !=# getline(s:l - 1)[0]
let s:scissors = 1
endif
let s:comment = escape((matchstr(getline(s:l), '^[#;@!$%^&|:]\S\@!') . '#')[0], '^$.*[]~\"/')
2019-12-05 22:47:25 +01:00
2022-01-08 21:51:59 +00:00
if s:scissors
let s:comment .= ' -\{24,\} >8 -\{24,\}$'
exe 'syn region gitcommitComment start="^' . s:comment . '" end="\%$" contains=gitcommitDiff'
2019-12-05 22:47:25 +01:00
else
2022-01-08 21:51:59 +00:00
exe 'syn match gitcommitComment "^' . s:comment . '.*"'
2019-12-05 22:47:25 +01:00
endif
2022-01-08 21:51:59 +00:00
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*\%$\)\@="'
2019-12-05 22:47:25 +01:00
2022-01-08 21:51:59 +00:00
unlet s:l s:comment s:scissors
syn match gitcommitTrailerToken "^[[:alnum:]-]\+\s*:" contained containedin=gitcommitTrailers
syn match gitcommitHash "\<\x\{40,}\>" contains=@NoSpell display
syn match gitcommitOnBranch "\%(^. \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
syn match gitcommitOnBranch "\%(^. \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
2012-04-13 23:04:47 +02:00
syn match gitcommitBranch "[^ ']\+" contained
2022-01-08 21:51:59 +00:00
syn match gitcommitNoBranch "\%(^. \)\@<=Not currently on any branch." contained containedin=gitcommitComment
syn match gitcommitHeader "\%(^. \)\@<=\S.*[:]\%(\n^$\)\@!$" contained containedin=gitcommitComment
syn region gitcommitAuthor matchgroup=gitCommitHeader start=/\%(^. \)\@<=\%(Author\|Committer\|Date\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
syn match gitcommitHeader "\%(^. \)\@<=commit\%( \x\{40,\}$\)\@=" contained containedin=gitcommitComment nextgroup=gitcommitHash skipwhite
syn match gitcommitNoChanges "\%(^. \)\@<=No changes$" contained containedin=gitcommitComment
2008-06-24 22:58:06 +00:00
2022-01-08 21:51:59 +00:00
syn match gitcommitType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained containedin=gitcommitComment nextgroup=gitcommitFile skipwhite
syn match gitcommitFile ".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitArrow
syn match gitcommitArrow " -> " contained nextgroup=gitcommitFile
syn match gitcommitUntrackedFile "\%(^.\t\)\@<=[^:/]*\%(/.*\)\=$" contained containedin=gitcommitComment
2008-06-24 22:58:06 +00:00
2022-01-08 21:51:59 +00:00
syn region gitcommitUntracked start=/^\z(.\) Untracked files:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader containedin=gitcommitComment containedin=gitcommitComment contained transparent fold
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
syn region gitcommitSelected start=/^\z(.\) Changes to be committed:$/ end=/^\z1$\|^\z1\@!/ contains=gitcommitHeader,gitcommitSelectedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold
syn region gitcommitUnmerged start=/^\z(.\) Unmerged paths:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader,gitcommitUnmergedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold
2008-06-24 22:58:06 +00:00
2022-01-08 21:51:59 +00:00
syn match gitcommitUntrackedFile "\%(^.\t\)\@<=.*" contained containedin=gitcommitUntracked
2022-01-08 21:51:59 +00:00
syn match gitcommitDiscardedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained nextgroup=gitcommitDiscardedFile skipwhite
syn match gitcommitSelectedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained nextgroup=gitcommitSelectedFile skipwhite
syn match gitcommitUnmergedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained nextgroup=gitcommitUnmergedFile skipwhite
syn match gitcommitDiscardedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow
syn match gitcommitSelectedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
syn match gitcommitUnmergedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitUnmergedArrow
2008-06-24 22:58:06 +00:00
syn match gitcommitDiscardedArrow " -> " contained nextgroup=gitcommitDiscardedFile
syn match gitcommitSelectedArrow " -> " contained nextgroup=gitcommitSelectedFile
2022-01-08 21:51:59 +00:00
syn match gitcommitUnmergedArrow " -> " contained nextgroup=gitcommitUnmergedFile
2008-06-24 22:58:06 +00:00
hi def link gitcommitSummary Keyword
2022-01-08 21:51:59 +00:00
hi def link gitcommitTrailerToken Label
2008-06-24 22:58:06 +00:00
hi def link gitcommitComment Comment
2022-01-08 21:51:59 +00:00
hi def link gitcommitHash Identifier
2008-06-24 22:58:06 +00:00
hi def link gitcommitOnBranch Comment
hi def link gitcommitBranch Special
2010-01-06 20:54:52 +01:00
hi def link gitcommitNoBranch gitCommitBranch
2008-06-24 22:58:06 +00:00
hi def link gitcommitDiscardedType gitcommitType
hi def link gitcommitSelectedType gitcommitType
2010-01-06 20:54:52 +01:00
hi def link gitcommitUnmergedType gitcommitType
2008-06-24 22:58:06 +00:00
hi def link gitcommitType Type
2010-01-06 20:54:52 +01:00
hi def link gitcommitNoChanges gitcommitHeader
2008-06-24 22:58:06 +00:00
hi def link gitcommitHeader PreProc
hi def link gitcommitUntrackedFile gitcommitFile
hi def link gitcommitDiscardedFile gitcommitFile
hi def link gitcommitSelectedFile gitcommitFile
2010-01-06 20:54:52 +01:00
hi def link gitcommitUnmergedFile gitcommitFile
2008-06-24 22:58:06 +00:00
hi def link gitcommitFile Constant
hi def link gitcommitDiscardedArrow gitcommitArrow
hi def link gitcommitSelectedArrow gitcommitArrow
2010-01-06 20:54:52 +01:00
hi def link gitcommitUnmergedArrow gitcommitArrow
2008-06-24 22:58:06 +00:00
hi def link gitcommitArrow gitcommitComment
"hi def link gitcommitOverflow Error
hi def link gitcommitBlank Error
let b:current_syntax = "gitcommit"