Comment rendre les paramètres VIM dépendants de l'ordinateur dans .vimrc?

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.