В моем .vimrc как я могу проверить наличие цветовой схемы? - PullRequest
46 голосов
/ 18 апреля 2011

В .vimrc можно ли загрузить цветовую схему, только если она существует?

Ответы [ 6 ]

46 голосов
/ 18 апреля 2011

Использование :colorscheme в try-catch , как Randy сделал может быть достаточно, если вы просто хотите загрузить его, если он существует, и сделать что-то еще в противном случае. Если вас не интересует часть else , достаточно простого :silent! colorscheme.

В противном случае, globpath() - это путь. Затем вы можете проверить каждый путь, возвращенный с помощью filereadable(), если вы действительно хотите.

" {rtp}/autoload/has.vim
function! has#colorscheme(name) abort
    let pat = 'colors/'.a:name.'.vim'
    return !empty(globpath(&rtp, pat))
endfunction

" .vimrc
if has#colorscheme('desert')
     ...

РЕДАКТИРОВАТЬ: filereadable($HOME.'/.vim/colors/'.name.'.vim') может показаться простым и определенно привлекательным, но этого недостаточно, если схема цветов, которую мы ищем, находится в другом месте. Обычно, если он был установлен в другом каталоге, благодаря диспетчеру плагинов. В этом случае единственным надежным способом является регистрация в vim 'runtimepath' (a.k.a. 'rtp'). Отсюда globpath(). Обратите внимание, что команда :colorscheme name выполняет поиск в {rtp}/colors/{name}.vim.

30 голосов
/ 18 апреля 2011

Альтернативой ответу @eckes будет попытка загрузить схему цветов и устранить ошибку, если она не существует:

try
    colorscheme mayormaynotexist
catch /^Vim\%((\a\+)\)\=:E185/
    " deal with it
endtry
8 голосов
/ 18 апреля 2011

Вы можете использовать функцию filereadable, чтобы проверить, существует ли цветовая схема (например, schemename): проверьте один раз в ~/vimfiles/colors (Win32, для Unix ~/.vim/colors/) и один раз в$VIMRUNTIME/colors/:

if filereadable("/path/to/schemename.vim")
  colo schemename
endif
7 голосов
/ 15 мая 2014

Мой метод похож,

if filereadable( expand("$HOME/.vim/colors/railscast.vim") )
    colorscheme railscast
endif

Это немного более надежно, чем жесткое кодирование всего пути.

1 голос
/ 09 ноября 2018

Это Ват, который у меня есть в моем файле .vimrc.

if filereadable( expand("$HOME/.vim/colors/sublimemonokai.vim") )
    colorscheme sublimemonokai "https://github.com/ErichDonGubler/vim-sublime-monokai

    " vim-sublime-monokai only support 256 colours in terminal. If you are using a terminal which support truecolor like iterm2, enable the GUI color
    set termguicolors

    " Otherwise, use below setting to activate the 256 color in terminal
    set t_Co=256
else
    echom "The sublimemonokai.vim were not found to be used as colorscheme. elflord will be set for the timebeing..."
    colorscheme elflord
endif

в основном он проверяет, существует ли на машине цветовая схема, которая мне нравится, или нет. Если это произойдет, он выберет его и применит все необходимые для него настройки. В противном случае выберите подходящую цветовую схему, которая поставляется с vim.

При просмотре других ответов мой ответ разделяет битовую часть с ответом @ user427390, и в нем есть дополнительное условие else.

Следующая ссылка очень помогла мне в написании сценариев для моих собственных файлов .vimrc и vim: http://learnvimscriptthehardway.stevelosh.com/

1 голос
/ 05 октября 2018

Обычно я использую избранное colorscheme с запасным вариантом, если мой любимый недоступен.Вложенный try сделает эту работу:

try 
  colorscheme solarized
  catch
  try 
    colorscheme peachpuff
    catch
  endtry
endtry

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

Кроме того, catch без аргументов ловит любую ошибку.Это удобно, если вы имеете дело с разными локалями, которые выдают разные сообщения об ошибках.

...