исправить цвет в vim или сделать решительный шаг?
Я разочарован из-за поведения vim под Ubuntu 13.04 и проблем, которые у меня есть цветопередача.
у меня проблемы при настройке colorscheme, и я также попытался исправить эту проблему с set t_Co=256
но я могу делать все, и ничего не меняется. Я также пробовал разные эмуляторы терминалов и разные настройки, но на самом деле ничего не меняется.
я попробовал Gvim, и, по-видимому, он правильно обрабатывает цвета, и у меня гораздо более последовательное поведение, теперь мой вопрос: что мне не хватает при использовании gvim вместо vim?
Я новый пользователь vim, поэтому я не знаю потенциала этих двух приложений.
изменить:
Например, это как darkblue
тема выглядит под vim
работает в gnome-terminal
6 ответов
предполагая, что ваша среда Ubuntu правильно настроена (и, судя по скриншоту, это так), вы, вероятно, просто разочарованы тем, что большинство colorschemes не поставляются с поддержкой высоких цветов в терминале.
можно использовать плагин CSApprox (или одна из его альтернатив), чтобы перевести GUI colorscheme в терминал высокого цвета (т. е. 88-256 цветов). Это приблизит вас к истине.
Terminal Vim, особенно когда вы хотите использовать цветные colorschemes, действительно больше работы для настройки. Тем не менее, вы найдете множество статей и советов в Интернете. Так как вы не сказали свои точные проблемы, только два совета:
- убедитесь, что colorscheme поддерживает цветные терминалы (некоторые только для GVIM)
- используйте современный эмулятор терминала, как
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
).
" 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 из:
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
в качестве редактора.