164

执行时如何加载不同的配色方案vimdiff

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

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

4

13 回答 13

198

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

我修改了我的配色方案,只使用一种颜色来突出显示(用另一种颜色来显示一行内的差异),这一切都不同了。

在此处输入图像描述

colorscheme_screenshot

我通过将以下内容添加到我的颜色方案文件 ( ~/.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 使用了不同的颜色方案

于 2013-06-19T05:18:36.380 回答
139

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

if &diff
    colorscheme some_other_scheme
endif

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

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre 在通过外部程序(diff 实用程序)进行过滤之前被调用,并且&diff-option 由 vim 在进入 diff 模式时设置(除其他外,请参阅:help diff

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

于 2010-01-07T09:51:55.827 回答
75

回答我自己的问题:

if &diff
    colorscheme evening
endif
于 2010-01-07T09:59:59.883 回答
24

我发现最简单的方法是将这一行粘贴到我的 ~/.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
于 2012-11-13T23:56:43.203 回答
23

如果您遇到不可读的配色方案(不仅丑陋,而且像粉红色背景上的白色文本一样不可读),一个简单的解决方法可能是使用 16 色而不是 256 色。然后你不必弄乱配色方案。

原因是默认的 vimdiff 配色方案指定DiffChange bg为“LightMagenta”,它被映射到 256 种颜色的非常浅的粉红色。这对于白色文本是不可读的。有 16 种颜色,“LightMagenta”映射为粗品红色,白色文本显示得更好。

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

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

于 2016-02-27T22:32:57.787 回答
22

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
于 2018-11-03T11:02:12.130 回答
14

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

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

“普通的” 在此处输入图像描述

“高的” 在此处输入图像描述

“低的” 在此处输入图像描述

于 2015-07-13T11:35:52.827 回答
8

我当前的颜色方案在 vimdiff 中没有正确显示一些差异,对于。例如,某些差异以相同的 fg/bg 颜色显示

实际上,我发现相同 fg/bg 颜色的主要原因是代码语法突出显示和差异颜色方案之间的冲突。您可以尝试更改差异颜色方案,但当您打开不同的文件类型(使用不同的代码语法突出显示)时,它可能是一场打地鼠游戏。

一个可靠的解决方案是禁用 vimdiff 中的语法突出显示。您可以键入:

:syntax off

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

if &diff
    syntax off
endif
于 2018-03-02T01:19:52.020 回答
7

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

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

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

于 2012-07-21T16:34:42.633 回答
7

/etc/vim/vimrc~/.vimrc:如果在编辑区域内使用深色背景并突出显示语法,则也打开此选项set background=dark

于 2014-06-07T15:13:32.337 回答
7

要在这里扩展@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
于 2019-04-04T19:10:46.130 回答
3

在 vim 中使用 vimdiff 时,我使用以下内容:

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

带有 else 语句的部分很重要,因为这是您在完成 diff 后返回到以前的配置的方式。所以你可以用相应的命令替换syntax off和。此 autocmd 处理更改设置并在退出 vimdiff 时将其还原(我使用的是精确的)。syntax oncolorschemeGdiff

于 2016-08-16T09:39:46.230 回答
0

没有一个解决方案对我有用。当我使用检查时,只有在打开差异(来自插件)if &diff后我为我的配置提供资源时它才有效。它不是自动打开的。此外,在退出差异窗格后,我不得不重新获得我原来的配色方案。因此,我最终创建了可以激活所需配色方案的自定义地图。:Gdifffugitive.vim

map ,m :colorscheme molokai<CR>
map ,c :colorscheme PaperColor<CR>
map ,g :colorscheme gruvbox<CR>

到目前为止,这是我发现的最有希望的解决方案,尽管它有点小技巧,如果配色方案自动更改,我会喜欢它。但是,这样一来,无论我是否在差异窗口中,我都可以在闲暇时快速应用任何配色方案。

于 2021-02-15T06:10:16.260 回答