【问题标题】:to fix the color in vim or to take the plunge?修复vim中的颜色还是冒险?
【发布时间】:2013-05-18 15:41:00
【问题描述】:

我很失望,因为 Ubuntu 13.04 下的 vim 行为以及色彩再现问题。

我在设置颜色方案时遇到了问题,我也尝试使用set t_Co=256 解决此问题,但我可以做任何事情并且没有任何改变。我还尝试了不同的终端模拟器和不同的设置,但实际上没有任何变化。

我尝试了 Gvim,显然它可以正确处理颜色并且我的行为更加一致,现在我的问题是:使用 gvim 而不是 vim 时我缺少什么?

我是 vim 新用户,所以我不知道这两个应用程序的潜力。

编辑: 例如,darkblue 主题在vim 下运行在gnome-terminal 下是这样的

【问题讨论】:

  • 我猜你正在使用专门为 gvim 编写的颜色方案。可以链接吗?
  • @RandyMorris 甚至捆绑的颜色方案都不起作用,例如darkblue,我还尝试了vimcolorschemetest.googlecode.com/svn/html/index-c.html 的一些方案,结果相同。关键是似乎没有任何配色方案可以正常工作。
  • 你的截图在我看来确实不错;终端的背景色确实是黑色,不是深蓝色,颜色也比较少,因为该方案只使用了终端默认的16色调色板。
  • 很多好答案!我使用以下插件测试我的颜色:github.com/guns/xterm-color-table.vim。当它显示完整的颜色表时,您就知道您已经拥有了所有可以使用的颜色。

标签: vim colors xterm


【解决方案1】:

原版配色方案无法对颜色数量做出假设,因此比较保守,只期望 PC 时代的 16 种基本颜色。

在 256 色 XTerm 中为 vim 设置颜色有点复杂,但结果令人满意。这是我使用的。确保您的 XTerm 实际上是 256 色版本(默认情况下是 Ubuntu)。此设置将使 vim 和 gvim 使用相同的颜色。 作为奖励,如果您已将 XTerm 配置为使用 TrueType 字体,它可以将高亮显示为斜体——请参阅白色 cmets(如果字体支持;我使用 *faceName: Droid Sans Mono)。

" If the xterm supports 256 colors, make sure TERM=xterm-256color.
" If it supports 256 colors but sets TERM=xterm, edit the appropriate
" resource file (~/.Xdefaults or $XAPPLRESDIR/XTerm) and add
" *termName: xterm-256color
" For mintty, select the xterm-256color TERM value in the options menu.
if &term == "xterm-256color"
  " Also for Cygwin's mintty.
  set t_Co=256
elseif $PROFILE_OS == "Solaris"
  set t_Co=256
elseif (&term == "xterm" || &term =~ "cons") && $TTY =~ "/dev/ttyv"
  " Adjust for FreeBSD syscons with ANSI colors.
  set t_Co=16
  map <Esc>[2~ i
  map <Esc>[3~ x
  map <Esc>[5~ <C-B>
  map <Esc>[6~ <C-F>
  colorscheme delek
elseif &term == "cygwin"
  " Adjust for Cygwin in a cmd.exe window.
  set t_Co=16
  colorscheme koehler
endif
"
" The cterm color numbers refer to XTerm colors in 256 color mode.
" Map rgb to cterm colors using <URL:https://gist.github.com/719710>.
" cterm=underline is rendered as italic with xterm +ulit
" gui=NONE turns off bold, italic.
"
" Normal must be set before colors "fg" and "bg" can be used.
highlight Normal ctermfg=216 ctermbg=233 guifg=#ffaf87 guibg=#121212

" pink        C 'c'
highlight Character
\ cterm=NONE      ctermfg=211     ctermbg=bg
\ gui=NONE        guifg=#ff87af   guibg=bg
" gray        This comment.
highlight Comment
\ cterm=underline ctermfg=250     ctermbg=bg
\ gui=italic      guifg=#bcbcbc   guibg=bg
highlight ColorColumn  cterm=NONE ctermfg=7   ctermbg=99  gui=NONE guifg=#c0c0c0 guibg=#875fff
" blue        if/then/else/fi.
highlight Conditional
\ cterm=NONE      ctermfg=27      ctermbg=bg
\ gui=NONE        guifg=#005fff   guibg=bg
" lightgreen  Numbers and quoted strings.
highlight Constant
\ cterm=NONE      ctermfg=82      ctermbg=bg
\ gui=NONE        guifg=#5fff00   guibg=bg
highlight Cursor
\ cterm=NONE      ctermfg=black   ctermbg=red
\ gui=NONE        guifg=black     guibg=red
highlight CursorColumn cterm=NONE ctermfg=7   ctermbg=97  gui=NONE guifg=#c0c0c0 guibg=#875faf
highlight DiffAdd      cterm=NONE ctermfg=8   ctermbg=24  gui=NONE guifg=#808080 guibg=#005f5f
highlight DiffChange   cterm=NONE ctermfg=8   ctermbg=56  gui=NONE guifg=#808080 guibg=#5f00d7
highlight DiffDelete   cterm=NONE ctermfg=8   ctermbg=88  gui=NONE guifg=#808080 guibg=#870000
highlight DiffText     cterm=NONE ctermfg=8   ctermbg=90  gui=NONE guifg=#808080 guibg=#870087
" Status line.
highlight Error
\ cterm=NONE      ctermfg=196     ctermbg=234
\ gui=NONE        guifg=#ff0000   guibg=black
highlight ErrorMsg
\ cterm=NONE      ctermfg=172     ctermbg=black
\ gui=NONE        guifg=orange    guibg=black
highlight Folded
\ cterm=NONE      ctermfg=112     ctermbg=235
\ gui=NONE        guifg=#87d700   guibg=#262626
highlight FoldColumn
\ cterm=NONE      ctermfg=112     ctermbg=235
\ gui=NONE        guifg=#87d700   guibg=#262626
" green       Function names (has()).
highlight Function
\ cterm=NONE      ctermfg=46      ctermbg=bg
\ gui=NONE        guifg=#00ff00   guibg=bg
" lightyellow Names.
highlight Identifier
\ cterm=NONE      ctermfg=139     ctermbg=bg
\ gui=NONE        guifg=#af87af   guibg=bg
highlight Include
\ cterm=NONE      ctermfg=50      ctermbg=bg
\ gui=NONE        guifg=#00ffd7   guibg=bg
highlight LineNr
\ cterm=underline ctermfg=244     ctermbg=237
\ gui=italic      guifg=#808080   guibg=#3a3a3a
highlight Macro
\ cterm=NONE      ctermfg=203     ctermbg=bg
\ gui=NONE        guifg=#ff5f5f   guibg=bg
" --More--
highlight MoreMsg
\ cterm=NONE      ctermfg=123     ctermbg=238
\ gui=NONE        guifg=#87ffff   guibg=#444444
" --INSERT--
highlight ModeMsg
\ cterm=NONE      ctermfg=123     ctermbg=238
\ gui=NONE        guifg=#87ffff   guibg=#444444
" Tilde and @ at the end of the window.
highlight NonText
\ cterm=bold      ctermfg=cyan    ctermbg=bg
\ gui=bold        guifg=cyan      guibg=bg
highlight Operator
\ cterm=NONE      ctermfg=129     ctermbg=bg
\ gui=NONE        guifg=#af00ff   guibg=bg
highlight PmenuSbar    cterm=NONE ctermfg=fg  ctermbg=32  gui=NONE guifg=fg      guibg=#0087d7
" medium blue #if/#else/#endif ${foo}
highlight PreProc
\ cterm=NONE      ctermfg=75      ctermbg=bg
\ gui=NONE        guifg=#5fafff   guibg=bg
" Hit-enter and yes/no questions.
highlight Question
\ cterm=NONE      ctermfg=green   ctermbg=bg
\ gui=NONE        guifg=green     guibg=bg
highlight Search
\ cterm=NONE      ctermfg=153     ctermbg=237
\ gui=NONE        guifg=cyan      guibg=gray10
" violett     <F11>, printf %s, `cmd`
highlight Special
\ cterm=bold      ctermfg=125     ctermbg=bg
\ gui=bold        guifg=#af005f   guibg=bg
" violett     <F11> in map
highlight SpecialKey
\ cterm=NONE      ctermfg=135     ctermbg=bg
\ gui=NONE        guifg=#af5fff   guibg=bg
highlight SpellBad
\ cterm=NONE      ctermfg=88      ctermbg=140
\ gui=NONE        guifg=#870000   guibg=#af87d7
highlight SpellCap
\ cterm=NONE      ctermfg=88      ctermbg=138
\ gui=NONE        guifg=#870000   guibg=#af8787
highlight SpellLocal
\ cterm=NONE      ctermfg=118     ctermbg=236
\ gui=NONE        guifg=#87ff00   guibg=#303030
highlight SpellRare
\ cterm=NONE      ctermfg=19      ctermbg=75
\ gui=NONE        guifg=#0000af   guibg=#5fafff
" lightblue   Keywords (highlight).
highlight Statement
\ cterm=NONE      ctermfg=44      ctermbg=bg
\ gui=NONE        guifg=#00d7d7   guibg=bg
highlight StatusLine
\ cterm=bold      ctermfg=41      ctermbg=239
\ gui=bold        guifg=#00d75f   guibg=#4e4e4e
highlight StatusLineNC
\ cterm=NONE      ctermfg=245     ctermbg=239
\ gui=NONE        guifg=#8a8a8a   guibg=#4e4e4e
" olive       static, const, volatile
highlight StorageClass
\ cterm=NONE      ctermfg=98      ctermbg=bg
\ gui=NONE        guifg=#875fd7   guibg=bg
" green       ''foo''
highlight String
\ cterm=NONE      ctermfg=35      ctermbg=bg
\ gui=NONE        guifg=#00af5f   guibg=bg
" titles for output from ":set all", ":autocmd" etc.
highlight Title
\ cterm=NONE      ctermfg=123     ctermbg=238
\ gui=NONE        guifg=#87ffff   guibg=#444444
" TODO XXX
highlight Todo
\ cterm=bold      ctermfg=161     ctermbg=181
\ gui=bold        guifg=#d7005f   guibg=#d7afaf
" lightbeige  int, long, ... ctermfg
highlight Type
\ cterm=NONE      ctermfg=170     ctermbg=bg
\ gui=NONE        guifg=#d75fd7   guibg=bg
" gray        Visual selection
highlight Visual
\ cterm=NONE      ctermfg=215     ctermbg=238
\ gui=NONE        guifg=burlywood guibg=gray30
" gray        Visual selection
highlight VisualNOS
\ ctermfg=215     ctermbg=238     ctermbg=bg
\ gui=NONE        guifg=#5090c0   guibg=gray30
highlight WarningMsg
\ cterm=NONE      ctermfg=green   ctermbg=black
\ gui=NONE        guifg=green     guibg=black
highlight WildMenu
\ cterm=NONE      ctermfg=23      ctermbg=148
\ gui=NONE        guifg=#005f5f   guibg=#afd700

if &term == "xterm-256color" && $DISPLAY == ""
  " Cygwin mintty doesn't do italic.
  highlight Comment cterm=NONE
  highlight LineNr  cterm=NONE
endif

要从中选择 cterm 颜色编号的 6x6x6 colorcube:

【讨论】:

  • 是的,但我认为终端仿真器可以支持超过 256 种颜色,这似乎是 X11 下任何终端仿真器的真正限制。
  • 试试这个配置。 256 不是限制。对于终端来说绰绰有余。您将无法看到 6x6x6 颜色立方体的许多颜色的差异。
【解决方案2】:

好吧,显然我尝试过的任何终端仿真器(xterm、gnome-terminal、...)都能够根据 X11 设置、VGA 驱动程序和环境变量 TERM 的值来管理 8 或 256 种颜色.所以首选是 256 色,如果您正在寻找更好的东西,您别无选择,只能选择 gvim 作为您的编辑器。

【讨论】:

    【解决方案3】:

    Terminal Vim,尤其是当你想使用高色彩的配色方案时,确实需要更多的设置工作。但是,您会在 Web 上找到大量文章和提示。由于您没有说出您的确切问题,因此仅提供两个提示:

    1. 确保颜色方案支持高色彩终端(有些仅支持 GVIM)
    2. 使用像gnome-terminal这样的现代终端仿真器,并正确设置TERM变量(即gnome-256color);这样可以避免与 :set t_Co 混淆,这是一种 hack。

    GVIM

    优点

    在视觉上,您可以获得一些额外的突出显示功能,例如用于拼写错误的 undercurl,以及完整的 24 位 RGB 颜色光谱。

    您还有更多可用于映射的键(或者至少,更多键可以直接映射而无需深入研究键代码和终端问题)。

    缺点

    如果您的 Vim 工作流程与 shell 有大量交互,即如果您执行大量外部 :!shell-command:make,或从 Vim 内启动 :shell,则只有终端提供完整功能; GVIM 仅内置原始终端仿真,因此某些输出可能错误或缺少突出显示。


    我个人在 GVIM 中进行大部分编辑,但偶尔会在终端中启动 Vim(例如编辑 Linux 配置文件或通过 SSH)。

    【讨论】:

    • Ubuntu gnome-terminal 是默认模拟器,除了set t_Co=256,我还没有发现其他可能影响屏幕上再现颜色数量的东西。例如,这就是深蓝色主题的样子 i42.tinypic.com/7319xy.png
    • 也许还提到了 TERM 环境变量,例如TERM=xterm-256color
    • 我还要补充一点 GVim 的优点是它可以同时显示罗马和 italic 字体的混合;斜体被某些语法文件用于某些文件类型。
    【解决方案4】:

    我曾经是Vim用户,因为同样的问题,即配色方案不兼容而切换到GVim。

    最初我不喜欢 Gvim 窗口的所有按钮、滚动条和菜单添加的视觉混乱。

    幸运的是,您可以通过在 .vimrc 中使用以下代码来隐藏所有这些并获得非常接近 Vim 控制台的内容:

    if has("gui_running")
        " GUI is running or is about to start.
        " Maximize gvim window.
        set lines=120 columns=140  
    
        " Display or hide menu when using gVim
        function! ToggleGUICruft()
          if &guioptions=='i'
            exec('set guioptions=imTrL')
          else
            exec('set guioptions=i')
          endif
        endfunction
    
        map <F11> <Esc>:call ToggleGUICruft()<cr>
    
        " by default, hide gui menus
        set guioptions=i
    
    endif
    

    您现在可以使用 F11 切换菜单和滚动条。

    到目前为止,我还没有发现 GVim 有任何缺点。如果您是新用户,菜单实际上有助于发现新命令。

    【讨论】:

    • 如何使用 make 和 makefile ?
    • 我没有在我的工作流程中使用:make,但该命令可用。但是,我不知道使用 Gvim 代替终端的限制。
    • @user2384250 : :help gui-shell 中似乎描述了限制,但仍然含糊不清。
    【解决方案5】:

    假设您的 Ubuntu 环境设置正确(从屏幕截图来看,确实如此),您可能只是对大多数颜色方案没有在终端中提供高颜色支持感到失望。

    您可以使用CSApprox plugin(或其替代方案之一)将 GUI 颜色方案转换为高颜色(即 88-256 色)终端。这将使您获得更接近的近似值。

    【讨论】:

    • 命令tput colors显示256,我怎样才能得到数百万种颜色?
    • 你不能,256是终端的最大值。尽管如此,这比大多数颜色方案(如引用的 darkblue)附带的默认 16 种颜色要好得多,并且非常接近 GVIM。试试看!
    • @user2384250,如果不使用 Konsole 修补过的 Vim,您将无法在终端模拟器中获得数百万种颜色。由于您是新用户,我建议您不要穿过那个兔子洞并满足于您所拥有的。
    【解决方案6】:

    GVim 与具有 GUI 和更好的颜色支持的 Vim 差不多:两者的使用方式应该没有太大区别。

    set t_Co=256 不是任何配色方案问题的正确解决方案。如果你想要 Vim 中的彩色配色方案,唯一要做的就是设置你的终端仿真器来宣传自己“能够显示 256 种颜色”。你如何做取决于你的终端模拟器,但它通常归结为将TERM 环境变量设置为xterm-256color 或类似的值。你不需要做任何其他事情。

    有数以千计的 Vim 配色方案可供选择,有些是仅 GUI 的,有些是仅终端的……确保选择适合您使用的配色方案。 GUI 颜色方案可以使用数千种颜色,但 CLI 颜色方案仅限于 Xterm 256 调色板;这往往会使 GUI 颜色方案“更漂亮”,但不一定更有用。

    如果颜色方案的名称或其README/描述中没有提示,您可以打开它并查找guibgctermbg。如果您有ctermbg(或ctermfg...),则色彩方案大部分可以保证在支持256 色的终端仿真器中工作。如果您有guibg,则颜色方案将在 GVim 中工作。如果两者都有,则 Vim 和 GVim 可以使用相同的配色方案。

    当然,YMMV。

    另外,请参阅this other answer of mine to a similar question

    【讨论】:

    • xterm-256color 的东西也不起作用,而这个答案 askubuntu.com/questions/67/… 这是我在使用这个“技巧”之前所看到的。
    • 是的,它适用于 Ubuntu 和每个 Linux 发行版以及每个常见的终端仿真器。请更新您的问题,明确描述您的问题您已经尝试过的方法。
    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 2014-08-09
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多