Dans un .vimrc
est-il possible de charger un schéma de couleurs uniquement s'il existe ?
En route pour le :silent! colorscheme foo
correspond très bien à mes besoins, merci.
Dans un .vimrc
est-il possible de charger un schéma de couleurs uniquement s'il existe ?
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
.
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.
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:/
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
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 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.