【问题标题】:Load different colorscheme when using vimdiff使用 vimdiff 时加载不同的颜色方案
【发布时间】:2011-01-02 10:05:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: vim vimdiff


    【解决方案1】:

    我不知道为什么 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 使用了不同的配色方案

    【讨论】:

    • 谢谢!这看起来好多了!
    • 就像 pabo 在另一条评论中所说,您可能需要将您的配色方案文件命名为 mycolorscheme.vim,并在末尾加上 .vim 扩展名。
    • 谢谢! Minor nit:我认为你不小心把所有“guibg”都变成了红色。您是否打算使用两种颜色——一种用于 DiffText,另一种用于其他颜色?
    • 为什么当使用数字 (ctermbg=17) 时颜色不起作用,但在使用单词时 (ctermbg=blue) - 它起作用了? ..解决方案:终端只有8种颜色1-7
    • MacOS 使用 iTerm2。不管我做了什么,我都得到了:找不到颜色方案 '~/.vim/colors/mycolorscheme'
    【解决方案2】:

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

    if &diff
        colorscheme some_other_scheme
    endif
    

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

    au FilterWritePre * if &diff | colorscheme xyz | endif

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

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

    【讨论】:

    • 两个管道“|”之间是否可以调用多个命令?在使用 vim 的 vimdiff 后,我也有兴趣返回原始颜色方案......
    • 管道是换行符的替代品,类似于 shell 脚本中的;,因此您只需添加新的“行”:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
    • colorscheme some_other_scheme 将在您的运行时路径中查找color/some_other_scheme.vim。您可以在 vim 中通过:set runtimepath? 查看您的运行时路径。
    • 对于控制台用户(比如我自己),我发现 'vividchalk' 是保持突出显示差异和突出显示语法之间对比度的最佳颜色方案(在默认安装集之外),至少对于 shell 脚本。紧随其后的是“晚上”。希望对您有所帮助。
    • 我的问题总是与语法突出显示缺乏对比,这会在差异着色中丢失整个文本块。我过去根据需要使用了 ':syntax off',但只是将它添加到我的 .vimrc 中的 'if &diff' 谓词中,现在保存了一些击键
    【解决方案3】:

    回答我自己的问题:

    if &diff
        colorscheme evening
    endif
    

    【讨论】:

    • 对我来说很棒的颜色!
    • 要在活动的 vim 会话中激活,请执行以下操作::colorscheme evening
    【解决方案4】:

    我发现最简单的方法是将这一行粘贴到我的 ~/.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,因为它更突出。
    • awesome 使其更具可读性,还有没有办法保留一些语法突出显示?
    【解决方案5】:

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

    【讨论】:

    • 非常感谢这个提示,尽管在我的情况下是相反的。 t_Co 设置为 8,将其增加到 set t_Co=256 极大地提高了可读性。
    【解决方案6】:

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

    【讨论】:

    【解决方案7】:

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

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

    “正常”

    “高”

    “低”

    【讨论】:

    • 你不会碰巧有一张这样的截图吗?
    【解决方案8】:

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

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

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

    :syntax off

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

    if &diff
        syntax off
    endif
    

    【讨论】:

    • 哦,有趣,有趣的是the answer by alan 禁用了差异部分中的语法突出显示,我设法使用它为每个不可读的突出显示添加不同的颜色
    • 我不确定这会有多彻底,但我现在发现,在终端中使用 vim 的情况下,真正的罪魁祸首是 vim 不知道终端的背景颜色Dmitry's answer 在这种情况下似乎可以解决它
    【解决方案9】:

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

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

    如果结果是明显的改进,请将您的更改发送给您的配色方案的维护人员,并请他调查问题。他很有可能会感谢您的关注,并且他会修复他的配色方案,以便其他用户也能从中受益。..

    【讨论】:

    • vim 开发人员收到了很多关于默认颜色方案如何在深色背景上显示的投诉和建议,但遗憾的是,这个问题尚未得到解决。
    • 看来真正的罪魁祸首是 vim 不知道终端的背景是暗的 Dmitry's answer 修复了这个问题
    【解决方案10】:

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

    【讨论】:

    • dang 没有意识到这是真正的问题
    【解决方案11】:

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

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

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

      带有 else 语句的部分很重要,因为这是你在完成 diff'ing 后返回到以前的配置的方式。所以你可以用各自的colorscheme 命令替换syntax offsyntax on。此 autocmd 处理更改设置并在退出 vimdiff 时恢复它(准确地说,我使用 Gdiff)。

      【讨论】:

        【解决方案13】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-11
          • 1970-01-01
          • 2015-10-27
          • 1970-01-01
          • 1970-01-01
          • 2022-11-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多