使vim使用类似git diff命令的颜色显示git diff(红色删除,绿色添加)
我运行了git config--global alias.ci commit--verbose 这使得运行使vim使用类似git diff命令的颜色显示git diff(红色删除,绿色添加),git,vim,vim-syntax-highlighting,Git,Vim,Vim Syntax Highlighting,我运行了git config--global alias.ci commit--verbose 这使得运行gitci就像运行gitcommit--verbose --verbose标志显示提交消息模板中的差异,该差异未被注释,因此语法高亮显示可以在其上工作,但会自动识别为未实际提交到存储库的日志中。当然,可以很长,但对于创建更好的提交注释非常有用。(如果你不需要它,你可以忽略它。) 无论如何,如果我运行git diff,删除的行(以“-”开头)是红色的,添加的行(以“+”开头)是绿色的 如果运行
gitci
就像运行gitcommit--verbose
--verbose
标志显示提交消息模板中的差异,该差异未被注释,因此语法高亮显示可以在其上工作,但会自动识别为未实际提交到存储库的日志中。当然,可以很长,但对于创建更好的提交注释非常有用。(如果你不需要它,你可以忽略它。)
无论如何,如果我运行git diff
,删除的行(以“-”开头)是红色的,添加的行(以“+”开头)是绿色的
如果运行git ci
,vim语法将突出显示作为常规颜色(白色)删除的行,以及作为青色添加的行
如何使vim语法高亮显示红色的删除行和绿色的添加行
vim状态行显示它正在编辑文件“~/code.git/.git/COMMIT\u EDITMSG”。我不太了解vim语法突出显示,但我知道它是可配置的。我不确定这种情况是如何配置的,因为我假设vim使用文件扩展名来决定要遵循哪些语法突出显示规则(这里可能有点偏离),而git没有给这个文件扩展名
编辑:实际上,vim必须检测到这是一个git提交文件,因为它的语法将前50个字符高亮显示为黄色。假设这是为了表明什么可以很好地适合于一个补丁的电子邮件主题行。简短版本:编辑一个文件
~/.vim/after/syntax/gitcommit.vim
,并添加如下内容:
hi-MFG=绿色
hi衍射字符MFG=红色
较长的版本,解释了我是如何到达那里的:
编辑提交消息时,运行:set ft
。这将显示Git提交文件的文件类型为gitcommit
。因此,要修改提交消息的突出显示,您需要编辑一个文件syntax/gitcommit.vim
,因为您希望更改覆盖正常突出显示,所以需要将其放在/之后的目录中。因此~/.vim/after/syntax/gitcommit.vim
现在,看看要改变什么。这里有一段非常有用的代码,我在某处(从tpope、IIRC)找到了它,从那以后我一直在愉快地使用它:
nmap:callsynstack()
功能!SynStack()
如果!存在(“*synstack”)
返回
恩迪夫
回波图(synstack(line('.')、col('.')、synIDattr(v:val,“name”))
endfunc
这样,打开一个详细提交,转到一个已删除的块,然后按Ctrl-Shift-p。它将显示类似于['gitcommitDiff','differemoved']
的内容。然后转到添加的块,并获取['gitcommitDiff','diffAdded']
查看/usr/share/vim/vim74/syntax/gitcommit.vim
可以看出发生了什么:syntax/gitcommit.vim
包括syntax/diff.vim
,这是diff
的标准突出显示文件。因此,上面的模式
查看/usr/share/vim/vim74/syntax/diff.vim
的结尾,您会发现可能需要更改的其他模式。当提交消息在文件中定义为gitcommit filetype时,语法高亮显示会起作用。vim/filetype.vim
:
autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG set ft=gitcommit
与公认的答案相同,但我发现一些不同的颜色有助于对比:
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
:set filetype=gitcommit
在编辑时帮了我的忙。git/rebase apply/patch
,由于某些原因,它似乎没有自动识别为gitcommit。当我运行git diff
时,-/+不是红色/绿色的。这就是我要找的:git config--global color.ui auto
。设置配置后,git diff
现在与giit diff--color