исправить цвет в vim или сделать решительный шаг?

Я разочарован из-за поведения vim под Ubuntu 13.04 и проблем, которые у меня есть цветопередача.

у меня проблемы при настройке colorscheme, и я также попытался исправить эту проблему с set t_Co=256 но я могу делать все, и ничего не меняется. Я также пробовал разные эмуляторы терминалов и разные настройки, но на самом деле ничего не меняется.

я попробовал Gvim, и, по-видимому, он правильно обрабатывает цвета, и у меня гораздо более последовательное поведение, теперь мой вопрос: что мне не хватает при использовании gvim вместо vim?

Я новый пользователь vim, поэтому я не знаю потенциала этих двух приложений.

изменить: Например, это как darkblue тема выглядит под vim работает в gnome-terminal enter image description here

6 ответов


предполагая, что ваша среда Ubuntu правильно настроена (и, судя по скриншоту, это так), вы, вероятно, просто разочарованы тем, что большинство colorschemes не поставляются с поддержкой высоких цветов в терминале.

можно использовать плагин CSApprox (или одна из его альтернатив), чтобы перевести GUI colorscheme в терминал высокого цвета (т. е. 88-256 цветов). Это приблизит вас к истине.


Terminal Vim, особенно когда вы хотите использовать цветные colorschemes, действительно больше работы для настройки. Тем не менее, вы найдете множество статей и советов в Интернете. Так как вы не сказали свои точные проблемы, только два совета:

  1. убедитесь, что colorscheme поддерживает цветные терминалы (некоторые только для GVIM)
  2. используйте современный эмулятор терминала, как gnome-terminal и правильно установить TERM переменной (т. е. gnome-256color); это позволяет избежать возни с :set t_Co, что является взломом.

GVim выступает

плюсы

визуально, вы получаете некоторые дополнительные возможности подсветка как undercurl для орфографических ошибок и полного 24-битного спектра RGB цветов.

у вас также есть больше ключей, доступных для сопоставления (или, по крайней мере, больше ключей просто сопоставить без необходимости углубляться в ключевой код и терминальные проблемы).

минусы

если ваш рабочий процесс Vim сильно взаимодействует с оболочкой, т. е. если вы выполняете много внешних :!shell-command или :make, или :shell из Vim только терминал предлагает полные возможности; GVIM имеет только примитивную эмуляцию терминала, поэтому некоторые выходные данные могут быть неправильными или отсутствует подсветка.


Я лично делаю большую часть своего редактирования в GVIM, но иногда запускаю Vim в терминале (например, для редактирования файлов конфигурации Linux или через SSH).


ванильные colorschemes не могут делать предположения о количестве цветов, поэтому они консервативны и ожидают только 16 основных цветов эпохи ПК.

Настройка цвета для vim в 256 color XTerm немного сложнее, но результат приятен. Вот что я использую. Убедитесь, что ваш 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


GVim не намного больше, чем Vim с графическим интерфейсом и лучшей поддержкой цвета: не должно быть глубокой разницы между тем, как вы используете оба.

set t_Co=256 is не правильное решение любой проблемы colorscheme. Если вы хотите красочные colorschemes в Vim только что нужно сделать, это настроить ваш эмулятор терминала, чтобы рекламировать себя как "способный отображать 256 цветов". Как это сделать, зависит от вашего эмулятора терминала, но обычно это сводится к установка TERM переменные среды xterm-256color или аналогичные. Тебе больше ничего не нужно делать.

есть тысячи Vim colorschemes на выбор, некоторые только для GUI, некоторые только для терминалов... убедитесь, что вы выбрали colorscheme, который подходит для вашего использования. GUI colorscheme может использовать тысячи цветов, но CLI colorschemes ограничены палитрой цветов Xterm 256; это, как правило, делает GUI colorschemes "красивее", но не обязательно более полезным.

если в названии colorscheme или его README/описание, вы можете открыть его и искать guibg и ctermbg. Если у вас есть ctermbg (или ctermfg...) colorscheme в основном гарантированно работает в эмуляторе терминала с поддержкой 256 цветов. Если у вас есть guibg colorscheme будет работать в GVim. Если у вас есть оба, вы можете иметь один и тот же colorscheme для Vim и GVim.

конечно, YMMV.

Также см. этот другой мой ответ на аналогичный вопрос.


Я был пользователем Vim и переключился на GVim из-за той же проблемы, а именно несовместимости цветовой схемы.

первоначально мне не понравился визуальный беспорядок, добавленный всеми кнопками, полосой прокрутки и меню окна Gvim.

к счастью, вы можете скрыть все это и получить что-то очень близкое к консоли Vim, используя следующий код в вашем .vimrc :

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. Если вы новый пользователь, меню может быть полезно для обнаружения новых команд.


Ok, по-видимому, любой эмулятор терминала, который я пробовал ( xterm, gnome-terminal,... ) способен управлять 8 или 256 цветами в зависимости от настроек X11, драйверов VGA и значения переменной окружения TERM. Таким образом, верхний выбор-256 цветов, и если вы ищете что-то лучшее, у вас нет другого выбора, кроме выбора gvim в качестве редактора.