Vim проверить, если опции действительны перед настройкой
Я использую свой .vimrc
на нескольких разных машинах, которые все имеют существенно разные версии vim. Большинство версий загружаются нормально, но одна из них сообщает об этом (исправленном) списке ошибок при запуске:
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 ответ
if exists('*pathogen#infect')
" The function pathogen#infect() exists
else
" The function pathogen#infect() does not exist
endif
использование :help exists()
для получения дополнительной информации. В дополнение к переменным, exists()
также может проверить &
опции, *
функции, :
команды, #
автокоманды событий.