使用Vimdiff时加载不同的配色方案


137

做时如何加载不同的颜色方案vimdiff

我想要这个,是因为我当前的配色方案在vimdiff,For 中没有正确显示一些差异。例如,某些差异显示为相同的fg / bg颜色。这使得很难理解差异。所以每次我做一个vimdiff我都必须做:colorscheme some_other_scheme

可以在.vimrc文件中完成吗?

Answers:


118

如果您是vimdiff从命令行调用的,则将以下内容放入您的中.vimrc

if &diff
    colorscheme some_other_scheme
endif

如果您在vim中使用vimdiff,则必须使用(也有一个plugin)覆盖用于启动/停止它的命令(例如diffthis,),或者使用自动命令:diffoff:cnoreabbr

au FilterWritePre * if &diff | colorscheme xyz | endif

在通过外部程序(diff实用程序)进行过滤之前,将调用FilterWritePre,并且-m选项&diff在进入diff-mode时由vim设置-option(另请参见:help diff)。

我不确定使用哪个自动命令返回到原始颜色方案。


在两个管道“ |”之间可以调用多个命令吗?我也有兴趣从vim使用vimdiff后返回到原始的colorcheme ...
有人仍在使用您MS-DOS 2010年

1
管道是换行符的替代品,类似于;shell脚本中的内容,因此您只需添加新的“行”即可:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith 2010年

1
colorscheme some_other_scheme将通过您的运行时路径查找color/some_other_scheme.vim。您可以:set runtimepath?在vim中查看运行时路径。
pabo 2014年

1
对于控制台用户(例如我本人),我发现“ vividchalk”是最好的色彩设计(默认安装集之外),至少在Shell脚本中,可以保持突出显示的差异和突出显示的语法之间的对比。紧随其后的是“晚上”。希望有帮助。
康拉德·迈尔

我的问题始终是语法突出显示缺乏对比度,语法差异突出显示会丢失整个文本块。过去,我根据需要使用了':syntax off',但只是将其添加到'if&diff'谓词中的.vimrc中,现在保存了一些击键
qneill

166

我不知道为什么vim使用这么多颜色来突出显示,它并不能真正帮助您了解发生了什么。

我修改了配色方案,只使用一种颜色来突出显示(另一种颜色来显示一行中存在差异的位置),然后才改变了所有差异。

之前

在此处输入图片说明

colorscheme_screenshot

我是通过将以下内容添加到我的colorscheme文件(~/.vim/colors/mycolorscheme.vim)的末尾来实现的。

highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
  • cterm -设置样式
  • ctermfg -设置文字颜色
  • ctermbg -设置突出显示
  • DiffAdd -添加了一行
  • DiffDelete -线已删除
  • DiffChange -行的一部分已更改(突出显示整个行)
  • DiffText -更改的行的确切部分

将此链接用作颜色编号的参考。

注意:我没有设置gui选项,因为我为macvim / gvim使用了不同的颜色方案


1
谢谢!看起来好多了!
vitaluha 2014年

4
就像pabo在另一条评论中说的那样,您可能需要命名您的配色方案文件,例如mycolorscheme.vim,最后以.vim扩展名。
David Winiecki 2015年

谢谢!小调:我想你不小心把所有的“吉布”变成了红色。您是否打算有两种颜色-一种用于DiffText,另一种用于其余?
卡皮尔·雅雅

6
为什么在使用数字(ctermbg = 17)时颜色不起作用,但是在使用单词(ctermbg = blue)时颜色有效?..解决方案:终端只有8种颜色1-7
Ricky Levi

3
使用iTerm2的MacOS。无论我做什么,我都会得到:无法找到配色方案'〜/ .vim / colors / mycolorscheme'直接在〜/ .vimrc中的“ if&diff”语句之间复制颜色代码就可以了。
Tony Barganski

59

要回答我自己的问题:

if &diff
    colorscheme evening
endif

对我来说很棒的颜色!
skytree

22

我发现最简单的方法是将此单行代码粘贴到我的〜/ .vimrc文件中:

" Fix the difficult-to-read default setting for diff text highlighting.  The
" bang (!) is required since we are overwriting the DiffText setting. The highlighting
" for "Todo" also looks nice (yellow) if you don't like the "MatchParen" colors.
highlight! link DiffText MatchParen

3
很好的解决方案!我选择Todo而不是MatchParen因为它更加突出。
MihaiCapotă13年

18

如果遇到不可读的配色方案(不仅难看,而且像粉红色背景上的白色文本一样不可读),一个简单的解决方法是使用16种颜色而不是256种颜色。这样,您就不必弄乱配色方案。

原因是默认的vimdiff配色方案指定DiffChange bg为“ LightMagenta”,它映射为256色非常浅的粉红色。白色文字无法读取。“ LightMagenta”具有16种颜色,映射为粗体洋红色,白色文本显示效果更好。

您可以通过以下操作进行快速测试:

vimdiff <file1> <file2>
:set t_Co?    " print current setting (256 by default)
:highlight    " print highlighting scheme
:set t_Co=16  " set to 16 colors
:highlight    " print highlighting scheme

256色屏幕截图 在此处输入图片说明

16色屏幕截图 在此处输入图片说明

如您所见,这16种颜色在不更改配色方案的情况下更具可读性。

要使其永久存在,您可以添加set t_Co=16.vimrc


2
非常感谢您提供此技巧,即使在我看来,也是如此。t_Co设置为8,set t_Co=256极大地提高了可读性。
奥拉夫·迪切

11

molokai: molokai配色方案 github: github配色方案 github和molokai这两个主题同样漂亮。

curl -fLo ~/.vim/colors/molokai.vim --create-dirs https://raw.githubusercontent.com/tomasr/molokai/master/colors/molokai.vim
curl -fLo ~/.vim/colors/github.vim --create-dirs https://raw.githubusercontent.com/endel/vim-github-colorscheme/master/colors/github.vim

将以下代码放入〜/ .vimrc中,您可以选择github或molokai(以“开头的行是注释):

if &diff
"   colorscheme github
    colorscheme molokai
endif

我最喜欢的解决这个老问题的方法!
稳定狗

10

对于使用非常出色的Solarized主题的人,有一个选项可以为diff模式打开高可见性:

" ~/vim.rc
" Set high visibility for diff mode
let g:solarized_diffmode="high"

“正常” 在此处输入图片说明

“高” 在此处输入图片说明

“低” 在此处输入图片说明


1
您不会碰巧有屏幕截图显示这有何不同?
Victor Zamanian

7

我当前的颜色计划在vimdiff中无法正确显示某些差异,例如。例如,一些差异显示为相同的fg / bg颜色

实际上,我发现相同fg / bg颜色的罪魁祸首是由于代码语法突出显示和diff colorscheme之间的冲突。您可以尝试更改diff colorscheme,但是当您打开不同的文件类型(具有不同的代码语法高亮显示)时,它可能会像打假游戏。

确定的解决方案是禁用vimdiff中的语法突出显示。您可以输入:

:syntax off

或者,如果您想每次自动执行此操作,请将其添加到您的末尾~/.vimrc

if &diff
    syntax off
endif

6

另一种方法是修复该配色方案。

据我所知,通常有四个与差异相关的突出显示组:DiffAdd,DiffChange,DiffDelete和DiffText。如果您不想为语法而烦恼,也可以根据自己的喜好调整颜色,则可以将默认的颜色方案以另一个名称复制到〜/ .vim / colors(如果不存在则创建目录),然后复制将相应的:hi命令从您的替代颜色方案粘贴到新的自定义颜色方案的末尾,有选择地注释掉其中任何其他与diff相关的语句。

如果结果是明显的改善,请向您的配色方案的维护者发送一封电子邮件,其中包含您所做的更改,并请他调查问题。他很有可能会感谢您的关注,并会修复他的配色方案,以便其他用户也将从中受益。


vim开发人员已收到许多有关默认颜色方案如何在深色背景上出现的投诉和建议,但可悲的是,此问题尚未得到解决。
Stefan Lasiewski 2015年


3

在vim中使用vimdiff时,我使用以下命令:

au BufEnter,BufNew * if &diff | syntax off | else | syntax on | endif

带有else语句的部分很重要,因为完成差异处理后,您才能返回到先前的配置。因此,您可以用syntax off和替换syntax on相应的colorscheme命令。退出vimdiff时,此autocmd可以处理更改设置并还原它的操作(我曾经Gdiff很精确)。


3

要在此处扩展@dean和其他一些答案,请将其添加到您的.vimrc

if &diff
  " colorscheme evening
  highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
endif
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.