使用 vimdiff 时加载不同的色彩方案

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

我想这是因为我目前的配色方案没有显示一些差异正确的 vimdiff,为。有些差异显示为相同的颜色。这让我们很难理解其中的区别。所以每次我做 vimdiff我都要做 :colorscheme some_other_scheme

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

88975 次浏览

如果您从命令行调用 vimdiff,请在 .vimrc中输入以下内容:

if &diff
colorscheme some_other_scheme
endif

如果你在 vim 中使用 vimdiff,你要么使用 :cnoreabbr(也有一个 插件)重写启动/停止它的命令(例如 diffthisdiffoff) ,要么使用自动命令:

au FilterWritePre * if &diff | colorscheme xyz | endif

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

但是我不确定使用哪个自动命令返回到原来的配色方案。

回答我自己的问题:

if &diff
colorscheme evening
endif

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

据我所知,通常有四个突出显示组相对于“区分”: 区分添加,区分变化,区分删除和区分文本。如果您不想为语法或者根据您的喜好调整颜色而烦恼,那么您可以将默认的配色方案以另一个名称复制到 ~/。Vim/color (创建目录,如果目录不存在) ,然后复制粘贴相应的: hi 命令从您的替代配色方案到新的自定义配色方案的末尾,可选地注释掉其中任何其他与 diff 相关的语句。

如果结果是一个明显的改善,发送电子邮件给你的配色方案的维护者与您的变化,并要求他研究的问题。很有可能他会感谢你的关心,他会修改他的配色方案,这样其他用户也会从中受益。.

我发现最简单的方法是将这个一行程序粘贴到我的 ~/. 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

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

我修改了我的配色方案,只使用 颜色来突出显示(另一种颜色来显示一行中的不同之处) ,它使所有的区别。

之前

enter image description here

之后

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-设置样式
  • 设置文本颜色
  • ctermbg-设置高亮
  • 增加了 DiffAdd线
  • 取出 DiffDelete血管
  • DiffChange-部分行被更改(突出显示整个行)
  • DiffText-改变的线条的确切部分

我使用 这个链接作为颜色编号的参考。

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

/etc/vim/vimrc~/.vimrc: 如果在编辑区域和语法突显内使用暗色背景,则打开此选项以及 set background=dark

对于那些使用非常优秀的 太阳能主题的人来说,有一个选项可以打开差异模式的高可见性:

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

“正常” enter image description here

“高” enter image description here

“低” enter image description here

如果您遇到不可读的配色方案(不仅丑陋,但不可读的粉红色背景上的白色文本) ,一个简单的解决方案可能是使用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

在 vim 中使用 vimdiff 时,我使用以下代码:

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

Else 语句的部分很重要,因为这是在完成 diff 之后返回到前一个配置的方法。因此,可以用各自的 colorscheme命令替换 syntax offsyntax on。这个 autocmd 在退出 vimdiff 时处理更改设置和恢复设置(确切地说,我使用 Gdiff)。

我目前的配色方案没有显示一些差异正确的维姆迪夫,因为。有些差异显示为相同的颜色

实际上,我已经发现,造成相同 fg/bg 颜色的罪魁祸首是代码语法突显和 diff 配色方案之间的冲突。你可以尝试改变 diff 的配色方案,但是当你打开不同的文件类型(使用不同的代码语法突显)时,这可能会变成一个打地鼠的游戏。

一个可靠的解决方案是禁用 vimdiff 中的语法突显,你可以输入:

:syntax off

或者,如果你想每次都自动这样做,那么把它添加到你的 ~/.vimrc的末尾:

if &diff
syntax off
endif

莫洛凯岛: 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

为了扩展@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

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

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

到目前为止,这是我找到的最有希望的解决方案,即使它有点像黑客,如果配色方案自动改变,我会喜欢它。 然而,这种方式,我可以应用任何配色方案在我的空闲时间,无论我是否在一个不同的窗口与否。

与大多数 vim 安装标准配套的 slate配色方案对我来说很好用。FWIW,我的工作背景很黑暗。因此,我只需在我的 .vimrc中添加以下内容:

if &diff
colorscheme slate
endif