在vim中修复颜色或者入门?

9
我对Ubuntu 13.04下Vim的行为以及颜色重现的问题感到失望。
当我设置配色方案时出现问题,我也尝试使用set t_Co=256修复,但是没有任何改变。我还尝试了不同的终端仿真器和不同的设置,但实际上什么也没有改变。
我尝试了GVim,显然它可以正确处理颜色,且我有一个更加一致的行为,现在我的问题是:在使用GVim而不是Vim时我错过了什么?
我是一个新的Vim用户,所以我不知道这两个应用程序的潜力。
编辑: 例如,这就是在gnome-terminal上运行的vim中的darkblue主题的外观 enter image description here

我猜你正在使用为 gvim 专门编写的配色方案。你能提供链接吗? - Randy Morris
@RandyMorris,甚至捆绑的颜色方案也无法正常工作,例如darkblue,我还尝试了一些来自http://vimcolorschemetest.googlecode.com/svn/html/index-c.html的方案,但结果相同。问题在于似乎没有任何颜色方案能够正常工作。 - user2384250
2
你的截图看起来对我来说很好;终端中的背景颜色确实是黑色而不是深蓝色,并且颜色较少,因为该方案仅在终端中使用默认的16色调色板。 - Ingo Karkat
许多好的答案!我使用以下插件来测试我的颜色:https://github.com/guns/xterm-color-table.vim。当它显示完整的颜色表时,您就知道您拥有了所有可以使用的颜色。 - David
6个回答

7
假设您的Ubuntu环境已正确设置(从截图来看,是这样的),您可能只是失望于大多数配色方案在终端中不支持高颜色。 您可以使用 CSApprox插件(或其替代品之一)将GUI配色方案转换为高颜色(即88-256种颜色)终端。 这将使您更接近期望的效果。

命令“tput colors”显示“256”,我如何获得数百万种颜色? - user2384250
你不能,256是终端中的最大值。尽管如此,与大多数配色方案(例如参考的_darkblue_)默认的16种颜色相比,这要好得多且相当接近GVIM。试试看! - Ingo Karkat
@user2384250,如果不使用Konsole和补丁过的Vim,你无法在终端仿真器和Vim中获得数百万种颜色。由于您是新用户,我建议您不要深入研究此问题,对您所拥有的内容感到满意即可。 - romainl

6
终端Vim,特别是当您想要使用高色彩配色方案时,确实需要更多的设置工作。然而,您会在网上找到大量的文章和提示。由于您没有告诉我们具体的问题,这里提供两个提示:
1. 确保配色方案支持高色彩终端(某些仅限GVIM)。 2. 使用现代终端仿真器,如gnome-terminal,并正确设置TERM变量(例如gnome-256color),这可以避免使用:set t_Co(这是一种hack)。
GVIM:
优点: 从视觉上看,您可以获得额外的突出显示功能,例如拼写错误的下划线和全24位RGB颜色光谱。
您还可以映射更多的键(或者至少不需要深入研究键代码和终端问题即可映射更多的键)。
缺点: 如果您的Vim工作流程与shell有很强的交互性,例如执行大量的外部:!shell-command、:make或从Vim中启动:shell,则只有终端提供完整的功能;GVIM仅内置了一个原始的终端仿真,因此某些输出可能不正确或缺少突出显示。
我个人在GVIM中进行大部分编辑,但偶尔会在终端中启动Vim(例如编辑Linux配置文件或通过SSH)。

在Ubuntu上,gnome-terminal是默认的模拟器,除了set t_Co=256之外,我没有找到其他可能影响屏幕上重现颜色数量的东西。例如,这就是深蓝色主题的外观http://i42.tinypic.com/7319xy.png。 - user2384250
也许可以提到 TERM 环境变量,例如 TERM=xterm-256color - Fredrik Pihl
我还要补充一点GVim的优点,就是它可以同时显示罗马字体和斜体字体的混合;某些语法文件会在特定的文件类型中使用斜体。 - Anthony Geoghegan

3

香草色系不能对颜色数量进行假设,因此它们保守地只期望PC时代的16种基本颜色。

在256色XTerm中设置vim的颜色需要更多步骤,但结果令人满意。以下是我使用的设置。确保您的XTerm实际上是256色版本(Ubuntu默认情况下是这样)。此设置将使vim和gvim使用相同的颜色。 作为奖励,如果您已经配置了XTerm使用TrueType字体,则可以将高亮渲染为斜体——请参见白色注释(如果字体支持;我使用*faceName: Droid Sans Mono)。

enter image description here

" 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

在这个6x6x6的彩色立方体中,可以选择cterm颜色编号:

enter image description here


是的,但我在想终端仿真器可能不仅仅能支持256种颜色,这似乎是X11下任何终端仿真器的真正限制。 - user2384250
尝试这个设置。256不是限制。对于终端来说,这已经足够了。在6x6x6的彩色立方体中,您也无法看到许多颜色之间的区别。 - Jens

1
我以前使用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 怎么样? - user2384250
我在我的工作流程中没有使用 :make,但这个命令是可用的。然而,我不知道使用 Gvim 而不是终端的限制。 - Xavier T.
@user2384250:关于限制,似乎在:help gui-shell中有所描述,但仍然含糊不清。 - Xavier T.

1

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。

此外,请参见我的另一个回答,类似的问题


xterm-256color也不起作用,而我在使用这个“技巧”之前就看了这个答案http://askubuntu.com/questions/67/how-do-i-enable-full-color-support-in-terminal。 - user2384250
是的,它可以在Ubuntu上以及每个Linux发行版和每个常见的终端仿真器中工作。请更新您的问题,并清楚地描述您的问题以及您已经尝试过的内容。 - romainl

0

好的,显然我尝试过的任何终端仿真器(xterm、gnome-terminal等)都能够管理8或256种颜色,这取决于X11设置、VGA驱动程序以及环境变量TERM的值。因此,最佳选择是256种颜色,如果你正在寻找更好的东西,那么你别无选择,只能选择gvim作为你的编辑器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接