neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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"