如何在执行vimdiff
时加载不同的colorscheme。
我想要这个,因为我当前的colorscheme在vimdiff
中没有正确显示一些差异,For。例如,某些差异显示为具有相同的fg / bg颜色。这使得很难理解差异。因此每次我vimdiff
我都必须:colorscheme some_other_scheme
可以在.vimrc
文件中完成吗?
答案 0 :(得分:135)
我不知道为什么vim使用这么多颜色来突出显示,它并没有真正帮助你弄清楚发生了什么。
我修改了我的colorscheme只使用一个颜色来突出显示(用另一个来显示一行中的差异)并且它完全不同。
我通过将以下内容添加到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
如您所见,16种颜色更易读,而且不会改变配色方案。
要将此永久保留,您可以将set t_Co=16
添加到.vimrc
答案 5 :(得分:9)
对于使用非常出色的Solarized主题的人来说,有一个选项会打开差异模式的高可见性:
" ~/vim.rc
" Set high visibility for diff mode
let g:solarized_diffmode="high"
答案 6 :(得分:5)
另一种方法是修复该配色方案。
据我所知,通常有四个与diff'ing相关的高亮组:DiffAdd,DiffChange,DiffDelete和DiffText。如果您不想对语法或根据自己的喜好调整颜色,可以将您的默认颜色方案复制到另一个名称〜/ .vim / colors(如果目录不存在则创建目录)和复制粘贴相应的:hi命令从您的替代配色方案到新的自定义配色方案的结尾,可以选择性地注释掉其中任何其他差异相关的陈述。
如果结果有明显改善,请发送电子邮件给您的配色方案的维护人员并提出更改,并要求他调查问题。他很有可能会感谢你的兴趣,并且他会修改他的配色方案,这样其他用户也会受益..
答案 7 :(得分:5)
/etc/vim/vimrc
或~/.vimrc
:
如果在编辑区域内使用深色背景并且语法突出显示,请启用此选项set background=dark
答案 8 :(得分:4)
molokai: 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
答案 9 :(得分:3)
在vim中使用vimdiff时使用以下内容:
au BufEnter,BufNew * if &diff | syntax off | else | syntax on | endif
带有else语句的部分非常重要,因为这是你完成差异后回到之前配置的方式。因此,您可以使用相应的syntax off
命令替换syntax on
和colorscheme
。此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>
到目前为止,这是我发现的最有前途的解决方案,尽管它有点小技巧,如果配色方案自动更改,我会喜欢它。 但是,通过这种方式,无论我是否在差异窗口中,我都可以在闲暇时快速应用任何配色方案。