使vim显示git diff与颜色,如git diff命令(红色删除,绿色添加)

时间:2015-05-14 21:24:04

标签: git vim vim-syntax-highlighting

我跑了git config --global alias.ci commit --verbose

这使得它如此运行git ci就像运行git commit --verbose

一样

--verbose标志显示提交消息模板中的差异,该模板未进行注释,因此语法突出显示在其上工作,但会自动识别为实际上未提交到存储库的日志中。当然可以很长,但可以用于创建更好的提交注释。 (而且,如果你不需要它,你可以忽略它。)

无论如何,如果我运行git diff,则删除的行(以' - '开头)为红色,添加的行(以' +&#开头) 39;)是绿色的。

如果我运行git ci,则vim语法会突出显示以常规颜色(白色)删除的行,以及添加为青色的行。

如何使vim语法高亮显示已删除的红色线条和以绿色添加的线条?

vim状态行显示它的编辑文件"〜/ code.git / .git / COMMIT_EDITMSG"。我对vim语法高亮不太了解,但我知道它是可配置的。我不确定这种情况是如何配置的,因为我假设vim使用文件扩展名来决定遵循哪些语法突出显示规则(我可能会离开这里)并且git不会给这个文件一个扩展名。

编辑:实际上,vim必须检测到这是一个git提交文件,因为它的语法将前50个字符突出显示为黄色。假设这表明什么可以很好地适合补丁的电子邮件主题行。

2 个答案:

答案 0 :(得分:17)

简短版本:编辑文件~/.vim/after/syntax/gitcommit.vim,并添加如下内容:

hi diffAdded   ctermfg=green
hi diffRemoved ctermfg=red

更长的版本,解释我是如何到达那里的:

编辑提交消息时,请运行:set ft。这将向您显示Git提交文件具有文件类型gitcommit。因此,要修改提交消息的突出显示,您需要编辑文件syntax/gitcommit.vim,并且由于您希望更改覆盖正常突出显示,因此需要将其放在after/目录中。因此~/.vim/after/syntax/gitcommit.vim

现在,找出要改变的内容。有一段非常有用的代码,我在某处(从tpope,IIRC)获取,并且我一直在愉快地使用它:

nmap <C-S-P> :call <SID>SynStack()<CR>
function! <SID>SynStack()
  if !exists("*synstack")
    return
  endif   
  echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc

使用此方法,打开详细提交,转到已删除的块,然后按 Ctrl - Shift - P 。它会显示['gitcommitDiff', 'diffRemoved']之类的内容。然后转到添加的块,然后获取['gitcommitDiff', 'diffAdded']

查看/usr/share/vim/vim74/syntax/gitcommit.vim会显示正在进行的操作:syntax/gitcommit.vim包含syntax/diff.vim,这是diff的标准突出显示文件。因此上面的模式。

查看/usr/share/vim/vim74/syntax/diff.vim的结尾,您会发现可能需要更改的其他模式。

答案 1 :(得分:1)

当提交消息在文件.vim/filetype.vim中定义为gitcommit文件类型时,语法突出显示起作用:

autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG set ft=gitcommit