Тест Vim, если опции допустимы перед установкой

Я использую мой .vimrc в ряде различных машин, которые у всех есть существенно отличающиеся версии энергии. Большинство версий загружается прекрасный, но один из них имеет, сообщает этот (сфабрикованный) список ошибок на запуске:

Error detected while processing ~/.vimrc:
Undefined variable: pathogen
Invalid expression: pathogen#infect()
Invalid :syntax subcommand: enable
Unknown function: executable
Invalid expression: executable('xclip')
:else without :if: else
:endif without :if: endif
Invalid argument: indent on
Invalid argument: plugin on
Invalid argument: nrformats=alpha,hex,octal
Illegal arguments: fromstart
Not an editor command: colorscheme zobean
Unknown option: foldenable
Unknown option: foldcolumn=0
Unknown option: cursorline
Unknown option: winminwidth=0
Ambiguous mapping, conflicts with "^V<silent>"
Ambiguous mapping, conflicts with "^V<leader>"
Ambiguous mapping, conflicts with "j"

Я знаю, что могу использовать if has('mouse') протестировать, если поддержка мыши включена. Есть ли подобный тест, как который я могу сделать для других команд, pathogen, и настройки и опции, которые обычно отсутствуют?

Отметьте, у меня нет разрешения установить программы на всех этих машинах, таким образом устанавливая последнее vim не допустимая опция.

Я намереваюсь только поддержать сингл .vimrc для всех машин, которые соответственно адаптируют опции в соответствии с тем, что доступно.

Приложение: содержание vimrc

Я не буду включать свое все .vimrc, поскольку это приблизительно 250 строк долго, но ниже являются представительные строки и разделы, вызывающие каждую из упомянутых выше ошибок:

execute pathogen#infect()
syntax enable
if has('win32')
    ...
elseif executable('xclip')
    ...
else
    ...
endif
filetype indent on
filetype plugin on
set nrformats=alpha,hex,octal
syn sync fromstart
colorscheme zobean
set foldenable foldnestmax=5 foldmethod=indent
set foldcolumn=0
set cursorline
set winminwidth=0
vnoremap < <gv
nnoremap <leader>~ vwb<esc>~
vnoremap jk <esc>
1
задан 22 May 2018 в 11:34

1 ответ

if exists('*pathogen#infect')
" The function pathogen#infect() exists
else
" The function pathogen#infect() does not exist
endif

Использовать :help exists() для большей информации. В дополнение к переменным, exists() также может протестировать на &опции, *функции, :команды, #автокоманды события.

1
ответ дан 7 December 2019 в 15:19

Другие вопросы по тегам:

Похожие вопросы: