Условная цветовая схема в .vimrc

Я использую vim и MacVim. У меня есть 256 цветов colorcheme, которые мне нравятся для моего MacVim, но если я загружу его в обычный vim, он, очевидно, не работает (вместо этого я получаю blinkies). Я хотел бы иметь возможность использовать одну и ту же конфигурацию vim для всех своих систем, поэтому:

Есть ли способ проверить размер палитры в .vimrc и установить одну из двух цветов, соответственно? Если это невозможно, то проверка на MacVim vs. vim также будет в порядке.

Ответы

Ответ 1

У вас есть несколько вариантов.

Я думаю, что лучше всего загрузить одну цветовую схему в .vimrc, а другую в .gvimrc (или в вашем случае просто не загружать цветовую схему в .vimrc вообще). Цветовая схема .gvimrc будет загружаться только при запуске GUI-версии MacVim.

Если вы не хотите разделить конфигурацию на несколько файлов, вы также можете использовать условное выражение, подобное этому в .vimrc:

if has('gui_running')
    colorscheme mycrazycolors
endif

Наконец, если вы действительно хотите узнать количество доступных цветов, вы можете проверить настройку t_Co:

:echo &t_Co

t_Co пуст в GUI-версии MacVim, поэтому вы, вероятно, все же захотите использовать вариацию метода has(). Фактически, по умолчанию .vimrc делает что-то похожее, чтобы определить, когда включать подсветку синтаксиса:

if &t_Co > 2 || has("gui_running")
    syntax on
endif

Для полноты я должен упомянуть, что вы также можете расширить свой файл colorscheme, чтобы включить разумные настройки для цветных терминалов. Однако это довольно много работы, и было бы проще просто переключиться на терминальное приложение, поддерживающее больше цветов.

Смотрите эти темы для получения дополнительной информации:

:help has()
:help termcap
:help termcap-colors

Ответ 2

Недавно я сделал что-то подобное, чтобы использовать тот же .vimrc для всех наших Linux-систем, но использовать моноширинный шрифт Ubuntu, если я работал на Ubuntu:

if (match(system("cat /etc/issue"), "Ubuntu") != -1)
    set guifont=Ubuntu\ Mono\ 13
else
    set guifont=Monospace\ 11
endif

Мне кажется, что вы можете сделать что-то похожее, чтобы определить, работаете ли вы на Mac или иначе:

if (match(system("uname -s"), "Darwin") != -1)
    colorscheme macscheme
else
    colorscheme otherscheme
endif

Обратите внимание, что я использовал http://en.wikipedia.org/wiki/Uname, чтобы узнать, какие отчеты об uname на OS X. У меня нет Mac здесь, чтобы попробовать это, но я думаю, что это точно.