В .vimrc
можно ли загрузить цветовую схему, только если она существует?
Как я могу проверить наличие цветовой схемы в моем .vimrc?
Ответы (6)
Использование :colorscheme
в try-catch как Рэнди сделал может быть достаточно, если вы просто хотите загрузить его, если он существует, и сделать что-то еще в противном случае. Если вас не интересует часть 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'
. (он же 'rtp'
). Отсюда globpath()
. Обратите внимание, что команда :colorscheme name
ищет в {rtp}/colors/{name}.vim
.
:silent! colorscheme foo
очень хорошо соответствует моим потребностям, спасибо.
- person mat; 29.11.2012
let
. В противном случае я получаю сообщения об ошибках, что pat
не является командой vim.
- person jdhao; 11.04.2019
Альтернативой ответу @eckes может быть попытка загрузить цветовую схему и устранить ошибку, если она не существует:
try
colorscheme mayormaynotexist
catch /^Vim\%((\a\+)\)\=:E185/
" deal with it
endtry
try-catch
в .vimrc!
- person ClosureCowboy; 19.04.2011
/^E185:/
- person Daniel YC Lin; 02.02.2017
:help catch
, так как предполагал, что это будет точный формат ошибки.
- person Randy Morris; 02.02.2017
Вы можете использовать функцию filereadable
, чтобы проверить, соответствует ли цветовая схема ( например, schemename
) существует: проверьте один раз под ~/vimfiles/colors
(Win32, для Unix используйте ~/.vim/colors/
) и один раз под $VIMRUNTIME/colors/
:
if filereadable("/path/to/schemename.vim")
colo schemename
endif
Мой метод похож,
if filereadable( expand("$HOME/.vim/colors/railscast.vim") )
colorscheme railscast
endif
Это немного более надежно, чем жесткое кодирование всего пути.
Обычно я использую любимый colorscheme
с запасным вариантом, если мой любимый недоступен. Вложенный try
сделает эту работу:
try
colorscheme solarized
catch
try
colorscheme peachpuff
catch
endtry
endtry
Если ни один из colorscheme
не доступен, загружается вариант по умолчанию (независимо от того, что происходит в вашей системе). Если одна или обе цветовые схемы недоступны, ошибки не отображаются. Сначала поставьте предпочитаемый colorscheme
.
Кроме того, catch
без аргументов перехватывает любую ошибку. Это удобно, если вы имеете дело с разными локалями, которые выдают разные сообщения об ошибках.
Это то, что у меня есть в моем .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/