Teste do Vim se as opções são válidas antes de definir

1

Eu uso meu .vimrc em várias máquinas diferentes, todas com versões significativamente diferentes do vim. A maioria das versões inicializa bem, mas uma delas reporta essa lista de erros na inicialização:

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"

Eu sei que posso usar if has('mouse') para testar se o suporte ao mouse está ativado. Existe um teste semelhante que eu possa fazer para os outros comandos, como pathogen , e configurações e opções que normalmente estão faltando?

Note que não tenho permissão para instalar programas em todas essas máquinas, portanto, instalar a última vim não é uma opção válida.

Eu pretendo manter apenas um único .vimrc para todas as máquinas, que adaptarão adequadamente as opções ao que está disponível.

Apêndice: conteúdo vimrc

Não incluirei todo o meu .vimrc , que tem cerca de 250 linhas, mas abaixo estão as linhas e seções representativas que causam cada um dos erros listados acima:

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>
    
por Zoey Hewll 22.05.2018 / 10:34

1 resposta

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

Use :help exists() para mais informações. Além das variáveis, exists() também pode testar as opções & , * functions, : comandos, # event autocommands.

    
por AlexP 22.05.2018 / 13:03