使用vimdiff时加载不同的colorscheme

时间:2010-01-07 09:22:39

标签: vim vimdiff

如何在执行vimdiff时加载不同的colorscheme。

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

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

13 个答案:

答案 0 :(得分:135)

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

我修改了我的colorscheme只使用一个颜色来突出显示(用另一个来显示一行中的差异)并且它完全不同。

之前

enter image description here

colorscheme_screenshot

我通过将以下内容添加到colorscheme文件(~/.vim/colors/mycolorsheme)的末尾来完成此操作。

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 - 更改行的确切部分

我使用this link作为颜色编号的参考。

注意:我没有设置gui选项,因为我对macvim / gvim使用了不同的colorscheme

答案 1 :(得分:99)

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

if &diff
    colorscheme some_other_scheme
endif

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

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterSritePre在通过外部程序(diff实用程序)进行过滤之前被调用,而&diff - 选项是由vim在进入diff-mode时设置的(参见:help diff

我不确定使用哪个自动命令返回原始colorscheme。

答案 2 :(得分:43)

回答我自己的问题:

if &diff
    colorscheme evening
endif

答案 3 :(得分:17)

我发现最简单的方法是将这个单行内容粘贴到我的〜/ .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

答案 4 :(得分:13)

如果您遇到难以理解的配色方案(不仅仅是丑陋的,而且像粉红色背景上的白色文字一样难以理解),一个简单的修复可能是使用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色截图 enter image description here

16色截图 enter image description here

如您所见,16种颜色更易读,而且不会改变配色方案。

要将此永久保留,您可以将set t_Co=16添加到.vimrc

答案 5 :(得分:9)

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

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

&#34;正常&#34; enter image description here

&#34;高&#34; enter image description here

&#34;低&#34; enter image description here

答案 6 :(得分:5)

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

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

如果结果有明显改善,请发送电子邮件给您的配色方案的维护人员并提出更改,并要求他调查问题。他很有可能会感谢你的兴趣,并且他会修改他的配色方案,这样其他用户也会受益..

答案 7 :(得分:5)

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

答案 8 :(得分:4)

molokai: molokai color scheme github的: github color scheme 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

答案 9 :(得分:3)

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

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

带有else语句的部分非常重要,因为这是你完成差异后回到之前配置的方式。因此,您可以使用相应的syntax off命令替换syntax oncolorscheme。此autocmd处理更改设置并在退出vimdiff时将其还原(我使用Gdiff来确切)。

答案 10 :(得分:2)

  

我当前的colorscheme在vimdiff中没有正确显示一些差异,For。例如,某些差异显示为具有相同的fg / bg颜色

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

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

:syntax off

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

if &diff
    syntax off
endif

答案 11 :(得分:0)

要在此处扩展@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

答案 12 :(得分:0)

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

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

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