В .vimrc
можно ли загрузить цветовую схему только в том случае, если она существует?
В моем .vimrc, как я могу проверить наличие цветовой схемы?
Ответ 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/