Je partage mon fichier de configuration VIM entre plusieurs ordinateurs. Cependant, je souhaite que certains paramètres soient spécifiques à certains ordinateurs.
Par exemple, les tailles de police sur le portable haute résolution devraient être différentes du bureau basse résolution. Et plus important encore, je veux que gVIM sur Windows se comporte plus Windowsy et MacVim sur OSX pour se comporter plus de Maccy et GVIM sur Linux pour se comporter comme toujours. (Ce pourrait être un sentiment étrange, mais je suis très habitué à changer les modes mentaux lors de la mise hors tension des systèmes d'exploitation)
Existe-t-il un moyen de définir quelques paramètres dans la .vimrc
ou dépendante du système d'exploitation?
Détection du système d'exploitation dans .vimrc
:
if has('win32') ...... elseif has('mac') ...... elseif has('unix') ...... endif
Pour tester une machine particulière, vous pouvez tester la sortie de la commande hostname
. Par exemple,
let hostname = substitute(system('hostname'), '\n', '', '') if hostname == "tigger" ... elseif hostname == "pooh" ... endif
Vous pouvez également tester la valeur des variables d'environnement disponibles:
if $HOSTNAME == "tigger" ... elseif $HOSTNAME == "pooh" ... endif
La variable $DISPLAY
peut également être utile.
J'ai cet extrait dans mon vimrc
:
let s:host_vimrc = $HOME . '/.' . hostname() . '.vimrc' if filereadable(s:host_vimrc) execute 'source ' . s:host_vimrc endif
Cela n'exécute que la source $HOME/.$HOSTNAME.vimrc
s'il existe. J'ai utilisé le hostname()
et la concaténation, vous pouvez également utiliser l' expand('$HOME/.$HOSTNAME.vimrc')
plus succincte expand('$HOME/.$HOSTNAME.vimrc')
si vous savez que $HOSTNAME
est toujours défini.
La réponse précédente sur la détection de l'OS ne détecte pas OS X dans MacVim pour moi (et l'utilisation has("macunix")
comme le suggère la documentation.
Voici ce que j'utilise pour distinguer entre Windows et OS X:
if has("win32") "Windows options here else if has("unix") let s:uname = system("uname") if s:uname == "Darwin\n" "Mac options here endif endif endif
Notez que has("win32")
fonctionné pour moi, même dans Vim 64 bits sur Windows 64 bits.
Vous pouvez également utiliser des tests similaires de uname
dans le bloc if has("unix")
pour distinguer d'autres saveurs d'Unix. Il suffit d'exécuter uname
ou uname -a
de la ligne de commande pour voir ce que vous devez comparer s:uname with
. Voir aussi :h matchstr()
si vous devez comparer juste une partie de la sortie de uname.
Avec beaucoup de machines, la liste de tous les noms d'hôtes dans .vimrc
peut devenir fastidieuse, il peut être plus facile de distinguer les différents saveurs Unix:
" set font when running on Solaris if (match(system('uname -s'), 'SunOS') >= 0) set guifont=* " fixes "E665: Cannot start GUI, no valid font found" endif
Vous pouvez simplement mettre les éléments spécifiques au système d'exploitation dans un .gvimrc personnalisé pour chaque machine et utiliser un .vimrc commun sur tous. Les deux fichiers sont lus lorsque GVim démarre, seulement .vimrc est lu lorsque le Vim non-gui démarre.
En ce qui concerne la séparation entre Linux et Windows – vous pouvez simplement mettre différents paramètres dans .vimrc
et _vimrc
, en conséquence.