web-dev-qa-db-fra.com

Test Vim si les options sont valides avant la définition

J'utilise mon .vimrc sur un certain nombre de machines différentes, qui ont toutes une version sensiblement différente de vim. La plupart des versions démarrent correctement, mais l’une d’entre elles a signalé cette liste (falsifiée) d’erreurs au démarrage:

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"

Je sais que je peux utiliser if has('mouse') pour vérifier si le support de la souris est activé. Existe-t-il un test similaire que je peux effectuer pour les autres commandes, telles que pathogen, ainsi que pour les paramètres et les options qui manquent couramment?

Notez que je n’ai pas la permission d’installer des programmes sur toutes ces machines. L’installation de la dernière version de vim n’est donc pas une option valide.

J'ai l'intention de ne conserver qu'un seul .vimrc pour toutes les machines, ce qui permettra d'adapter de manière appropriée les options à ce qui est disponible.

Annexe: contenu de vimrc

Je n'inclurai pas l'intégralité de mon .vimrc, car il comporte environ 250 lignes, mais vous trouverez ci-dessous des lignes et des sections représentatives à l'origine de chacune des erreurs répertoriées ci-dessus:

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
Zoey Hewll
if exists('*pathogen#infect')
" The function pathogen#infect() exists
else
" The function pathogen#infect() does not exist
endif

Utilisez :help exists() pour plus d’informations. En plus des variables, exists() peut également tester &options, *functions, :commands, #event des autocommandes.

1
AlexP