修复vim中的颜色还是采取措施?

时间:2013-05-23 10:14:03

标签: vim colors xterm

我很失望,因为Ubuntu 13.04下的vim行为和我正在进行色彩再现的问题。

我在设置colorscheme时遇到问题,我也尝试用set t_Co=256修复此问题,但我可以做任何事情而且没有任何改变。我也尝试了不同的终端模拟器和不同的设置,但实际上没有任何改变。

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

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

编辑: 例如,在darkblue enter image description here

中运行vim下的gnome-terminal主题是这样的

6 个答案:

答案 0 :(得分:7)

假设您的Ubuntu环境设置正确(并从屏幕截图中判断出来),您可能只是对大多数色彩系统在终端中没有高色彩支持感到失望。

您可以使用CSApprox plugin(或其中一个替代方案)将GUI colorscheme转换为高色(即88-256色)终端。这会让你更近似。

答案 1 :(得分:6)

Terminal Vim,特别是当您想要使用高色调色彩时,确实需要设置更多工作。但是,您会在网上找到大量文章和提示。既然你没有告诉你确切的问题,只需要两个提示:

  1. 确保colorscheme支持高色终端(有些仅支持GVIM)
  2. 使用gnome-terminal之类的现代终端模拟器,并正确设置TERM变量(即gnome-256color);这可以避免弄乱:set t_Co,这是一个黑客攻击。
  3. GVIM

    赞成

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

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

    缺点

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


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

答案 2 :(得分:3)

vanilla colorschemes不能对颜色数量做出假设,所以它们是保守的,只能期待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 colorcube用于选择cterm颜色编号:

enter image description here

答案 3 :(得分:1)

GVim不仅仅是带有GUI和更好色彩支持的Vim:在两者的使用方式之间不应有任何深刻的区别。

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

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

如果colorscheme或其README / description的名称中没有提示,您可以打开它并查找guibgctermbg。如果您有ctermbg(或ctermfg ...),则colorscheme主要保证在256色的终端仿真器中工作。如果您有guibg,则colorscheme将在GVim中运行。如果你有两个,你可以使用相同的颜色方案Vim和GVim。

当然,YMMV。

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

答案 4 :(得分: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 切换菜单&amp;滚动条。

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

答案 5 :(得分:0)

好的,显然我尝试的任何终端仿真器(xterm,gnome-terminal,...)都能够管理8或256种颜色,具体取决于X11设置,VGA驱动程序和环境变量{{1 }}。因此,最佳选择是256色,如果您正在寻找更好的东西,除了选择TERM作为您的编辑之外别无选择。