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

use*_*689 10 git vim vim-syntax-highlighting

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

这使它如此运行git ci就像跑步一样git commit --verbose

--verbose标志在提交消息模板中显示了一个diff,它没有被注释,因此语法高亮处理对其起作用,但是会自动识别为实际上没有提交到存储库的日志中.当然可以很长,但可以用于创建更好的提交注释.(而且,如果你不需要它,你可以忽略它.)

无论如何,如果我运行git diff,被删除的行(以' - '开头)为红色,添加的行(以'+'开头)为绿色.

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

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

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

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

lcd*_*047 19

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

hi diffAdded   ctermfg=green
hi diffRemoved ctermfg=red
Run Code Online (Sandbox Code Playgroud)

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

编辑提交消息时,请运行:set ft.这将向您显示Git提交文件具有filetype 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
Run Code Online (Sandbox Code Playgroud)

有了这个,打开一个详细的提交,转到一个删除的块,然后按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,你会发现你可能需要改变的其他模式.


Dun*_*unk 6

与接受的答案相同,但我发现一些不同的颜色对于对比很有用:

hi diffAdded cterm=bold ctermfg=DarkGreen
hi diffRemoved cterm=bold ctermfg=DarkRed

hi diffFile cterm=NONE ctermfg=DarkBlue
hi gitcommitDiff cterm=NONE ctermfg=DarkBlue
hi diffIndexLine cterm=NONE ctermfg=DarkBlue
hi diffLine cterm=NONE ctermfg=DarkBlue
Run Code Online (Sandbox Code Playgroud)