Подтвердить что ты не робот

В моем .vimrc, как я могу проверить наличие цветовой схемы?

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

4b9b3361

Ответ 1

Использование :colorscheme в try-catch, как это сделал Randy, может быть достаточно, если вы просто хотите загрузить его, если он существует, и сделать что-то еще в противном случае. Если вас не интересует остальная часть, просто :silent! colorscheme :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' (он же 'rtp'). Отсюда globpath(). Обратите внимание, что :colorscheme name команда :colorscheme name ищет в {rtp}/colors/{name}.vim.

Ответ 2

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

try
    colorscheme mayormaynotexist
catch /^Vim\%((\a\+)\)\=:E185/
    " deal with it
endtry

Ответ 3

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

if filereadable("/path/to/schemename.vim")
  colo schemename
endif

Ответ 4

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

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

Это немного более надежный, чем hardcoding весь путь.

Ответ 5

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

try 
  colorscheme solarized
  catch
  try 
    colorscheme peachpuff
    catch
  endtry
endtry

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

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

Ответ 6

Это Ват, у меня есть в моем файле .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/