【发布时间】:2011-01-02 10:05:41
【问题描述】:
在执行vimdiff 时如何加载不同的配色方案。
我想要这个是因为我当前的颜色方案在vimdiff 中没有正确显示一些差异,对于。例如,某些差异以相同的 fg/bg 颜色显示。这使得很难理解差异。所以每次我做vimdiff我都必须做:colorscheme some_other_scheme
这可以在.vimrc 文件中完成吗?
【问题讨论】:
在执行vimdiff 时如何加载不同的配色方案。
我想要这个是因为我当前的颜色方案在vimdiff 中没有正确显示一些差异,对于。例如,某些差异以相同的 fg/bg 颜色显示。这使得很难理解差异。所以每次我做vimdiff我都必须做:colorscheme some_other_scheme
这可以在.vimrc 文件中完成吗?
【问题讨论】:
我不知道为什么 vim 使用这么多颜色来突出显示,它并不能真正帮助你弄清楚发生了什么。
我修改了我的配色方案,只使用 一种 颜色来突出显示(用另一种颜色来显示一行内的不同之处),结果完全不同。
我通过将以下内容添加到我的颜色方案文件 (~/.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 - 更改的行的确切部分我使用this link 作为颜色编号的参考。
注意:我没有设置 gui 选项,因为我为 macvim/gvim 使用了不同的配色方案
【讨论】:
如果您从命令行调用vimdiff,请将以下内容放入您的.vimrc:
if &diff
colorscheme some_other_scheme
endif
如果您在 vim 中使用 vimdiff,则必须使用 :cnoreabbr 覆盖用于启动/停止它的命令(例如 diffthis、diffoff)(还有一个 plugin ) 或使用自动命令:
au FilterWritePre * if &diff | colorscheme xyz | endif
FilterWritePre 在通过外部程序(diff 实用程序)过滤之前被调用,&diff-option 在 vim 进入 diff 模式时由 vim 设置(其中,请参阅 :help diff)
我不确定使用哪个自动命令来返回原始颜色方案。
【讨论】:
;,因此您只需添加新的“行”:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
colorscheme some_other_scheme 将在您的运行时路径中查找color/some_other_scheme.vim。您可以在 vim 中通过:set runtimepath? 查看您的运行时路径。
回答我自己的问题:
if &diff
colorscheme evening
endif
【讨论】:
:colorscheme evening
我发现最简单的方法是将这一行粘贴到我的 ~/.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
【讨论】:
Todo 而不是MatchParen,因为它更突出。
如果您遇到不可读的配色方案(不仅丑陋,而且像粉红色背景上的白色文本一样不可读),一个简单的解决方法可能是使用 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
【讨论】:
t_Co 设置为 8,将其增加到 set t_Co=256 极大地提高了可读性。
莫洛凯岛: 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
【讨论】:
对于使用非常出色的Solarized 主题的人,有一个选项可以打开差异模式的高可见性:
" ~/vim.rc
" Set high visibility for diff mode
let g:solarized_diffmode="high"
【讨论】:
我当前的颜色方案在 vimdiff 中没有正确显示一些差异,对于。例如,某些差异以相同的 fg/bg 颜色显示
实际上,我发现相同 fg/bg 颜色的主要原因是代码语法突出显示和差异颜色方案之间的冲突。您可以尝试更改差异颜色方案,但当您打开不同的文件类型(使用不同的代码语法突出显示)时,它可能是一场打地鼠游戏。
一个可靠的解决方案是禁用 vimdiff 中的语法高亮。您可以输入:
:syntax off
或者,如果您想每次都自动执行此操作,请将其添加到 ~/.vimrc 的末尾:
if &diff
syntax off
endif
【讨论】:
另一种方法是修复该配色方案。
据我所知,通常有四个与 diff'ing 相关的高亮组:DiffAdd、DiffChange、DiffDelete 和 DiffText。如果您不想为语法而烦恼或根据自己的喜好调整颜色,您可以将默认配色方案以另一个名称复制到 ~/.vim/colors (如果目录不存在,则创建该目录)和将替代配色方案中的相应 :hi 命令复制粘贴到新自定义配色方案的末尾,可选择注释掉其中的任何其他与差异相关的语句。
如果结果是明显的改进,请将您的更改发送给您的配色方案的维护人员,并请他调查问题。他很有可能会感谢您的关注,并且他会修复他的配色方案,以便其他用户也能从中受益。..
【讨论】:
/etc/vim/vimrc 或 ~/.vimrc:
如果在编辑区域内使用深色背景并突出显示语法,也请打开此选项set background=dark
【讨论】:
要在此处扩展 @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
【讨论】:
在 vim 中使用 vimdiff 时,我使用以下内容:
au BufEnter,BufNew * if &diff | syntax off | else | syntax on | endif
带有 else 语句的部分很重要,因为这是你在完成 diff'ing 后返回到以前的配置的方式。所以你可以用各自的colorscheme 命令替换syntax off 和syntax on。此 autocmd 处理更改设置并在退出 vimdiff 时恢复它(准确地说,我使用 Gdiff)。
【讨论】:
没有一个解决方案对我有用。当我使用if &diff 检查时,它只有在我打开差异(来自fugitive.vim 插件的:Gdiff)后资源配置时才有效。它不是自动打开的。此外,在退出差异窗格后,我不得不重新获得我原来的配色方案。
因此,我最终创建了可以激活所需配色方案的自定义地图。
map ,m :colorscheme molokai<CR>
map ,c :colorscheme PaperColor<CR>
map ,g :colorscheme gruvbox<CR>
到目前为止,这是我发现的最有希望的解决方案,尽管它有点小技巧,如果配色方案自动更改,我会喜欢它。 但是,这样一来,无论我是否在差异窗口中,我都可以在闲暇时快速应用任何配色方案。
【讨论】: