58 votes

Dans mon .vimrc, comment puis-je vérifier l'existence d'un schéma de couleurs ?

Dans un .vimrc est-il possible de charger un schéma de couleurs uniquement s'il existe ?

61voto

Luc Hermitte Points 14171

Utilisation de :colorscheme dans un try-catch como Randy a fait peut être suffisant si vous voulez juste le charger s'il existe et faire autre chose sinon. Si vous n'êtes pas intéressé par le sinon partie, un simple :silent! colorscheme est suffisant.

Autrement, globpath() est la voie à suivre. Vous pouvez, alors, vérifier chaque chemin retourné avec filereadable() si vous le souhaitez vraiment.

" {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')
     ...

EDIT : filereadable($HOME.'/.vim/colors/'.name.'.vim') peut sembler simple et c'est définitivement attrayant, mais cela ne suffit pas si le schéma de couleurs que nous recherchons se trouve ailleurs. Typiquement s'il a été installé dans un autre répertoire grâce à un gestionnaire de plugins. Dans ce cas, le seul moyen fiable est de vérifier dans vim 'runtimepath' (alias 'rtp' ). Par conséquent, globpath() . Notez que :colorscheme name La commande recherche dans {rtp}/colors/{name}.vim .

11 votes

En route pour le :silent! colorscheme foo correspond très bien à mes besoins, merci.

1 votes

La partie concernant l'affectation des variables devrait utiliser let . Sinon, je reçois les messages d'erreur suivants pat n'est pas une commande vim.

0 votes

@jdhao. En effet, vous avez raison. Je me demande comment il a pu rester dans cet état si longtemps... Merci.

37voto

Randy Morris Points 16975

Une alternative à la réponse de @eckes serait d'essayer de charger le schéma de couleurs et de gérer l'erreur s'il n'existe pas :

try
    colorscheme mayormaynotexist
catch /^Vim\%((\a\+)\)\=:E185/
    " deal with it
endtry

1 votes

Merci. Je ne savais pas que vous pouviez faire un try-catch dans un .vimrc !

0 votes

Pourriez-vous expliquer davantage la signification de la syntaxe de l'expression régulière catch ? Je ne comprends pas pourquoi ne pas simplement /^E185:/

0 votes

J'ai simplement utilisé l'exemple de :help catch car j'ai supposé que ce serait le même format d'erreur.

10voto

eckes Points 17277

Vous pourriez utiliser le filereadable pour vérifier si un schéma de couleurs (par ex. schemename ) existe : vérifier une fois sous ~/vimfiles/colors (Win32, pour Unix utiliser ~/.vim/colors/ ) et une fois sous $VIMRUNTIME/colors/ :

if filereadable("/path/to/schemename.vim")
  colo schemename
endif

7voto

Corey Points 1042

Ma méthode est similaire,

if filereadable( expand("$HOME/.vim/colors/railscast.vim") )
    colorscheme railscast
endif

C'est un peu plus robuste que de coder en dur le chemin entier.

6voto

jebidiam Points 31

Normalement, j'utilise un favori colorscheme avec une solution de repli si mon préféré n'est pas disponible. Une imbrication try fera en sorte que cela fonctionne :

try 
  colorscheme solarized
  catch
  try 
    colorscheme peachpuff
    catch
  endtry
endtry

Si aucun des deux colorscheme est disponible, celui par défaut est chargé (quel qu'il soit sur votre système). Aucune erreur n'est affichée si l'un ou les deux schémas de couleurs ne sont pas disponibles. Mettez votre colorscheme d'abord.

Aussi, catch sans aucun argument permet d'éviter toute erreur. C'est pratique si vous avez affaire à différentes langues qui donnent des messages d'erreur différents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X