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

44

Je partage mon fichier de configuration VIM entre plusieurs ordinateurs. Cependant, je souhaite que certains paramètres soient spécifiques à certains ordinateurs.

Par exemple, la taille des polices d'un ordinateur portable haute résolution doit être différente de celle d'un ordinateur basse résolution. Et plus important encore, je veux que gVIM sous Windows se comporte plus souvent et que MacVim sous OSX se comporte davantage et que gVIM sous Linux se comporte comme il le fait toujours. (Cela pourrait être un sentiment étrange, mais je suis très habitué à changer de mode mental lorsque je change de système d'exploitation)

Existe-t-il un moyen de définir quelques paramètres dans la .vimrcmachine ou le système d'exploitation?

bastibe
la source

Réponses:

44

Détection de système d'exploitation dans .vimrc:

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif
Codeur occasionnel
la source
4
Également utile: has('gui_running')si vous devez faire la différence entre le mode tty et le mode interface graphique.
Chris Johnsen
10
La fonction has () teste la présence de fonctionnalités Vim. Il n'y a pas de fonctionnalité 'linux'. L'argument approprié est 'unix'. En outre, l'argument approprié pour OS-X est «macunix». Il existe également une fonctionnalité "mac", mais je ne sais pas si cela has('mac')est vrai pour tous les Mac ou uniquement pour les Mac antérieurs à OS-X. Voir :help feature-listpour la liste complète.
garyjohn
1
Oui, has('unix'). Mon erreur.
Casual Coder
Une réponse très tardive, mais oui, a pour moi des déclencheurs ('mac') dans OSX.
Diablo-D3
1
J'ai testé vim 1) fourni avec OS X et 2) que j'ai installé via le préfixe Gentoo (quelque chose de similaire à Homebrew) et 3) fourni par MacVim. Seul celui qui provient de MacVim retournera correctement la valeur true pour has("mac"). À mon avis, ils ont utilisé un correctif qui fait en sorte que le test de fonctionnalité fonctionne. Si vous comptez sur has("mac")test, faites des tests pour vous assurer qu'il est pris en charge sur votre vim.
Yegle 10/10
26

Pour tester une machine particulière, vous pouvez tester la sortie de la hostnamecommande. 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 $DISPLAYvariable peut aussi être utile.

Garyjohn
la source
13
hostname () fera ceci, par exemple: if hostname () == 'tigger' ..., sans avoir à passer l'appel système.
tvon
Le résultat pour system('hostname')était machine.mycompany.com\n, je devais donc changer la commande de substitution en substitute(system('hostname'), '\.\_.*$', '', '').
JPaget
9

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

Ceci s’exécute simplement source $HOME/.$HOSTNAME.vimrcs’il existe. J'ai utilisé hostname()et concaténation, vous pouvez également utiliser le plus succinct expand('$HOME/.$HOSTNAME.vimrc')si vous savez qu'il $HOSTNAMEest toujours défini.

impensé
la source
7

La réponse précédente à propos de la détection de système d'exploitation ne détecte pas OS X sous MacVim pour moi (et l'utilisation ne correspond pas non plus has("macunix")comme le suggère la documentation).

Voici ce que j'utilise pour distinguer 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 cela a has("win32")fonctionné pour moi, même dans Vim 64 bits sur Windows 64 bits.

Vous pouvez également utiliser des tests similaires unamedans le if has("unix")bloc pour distinguer d'autres versions d'Unix. Il suffit de lancer unameou uname -ade la ligne de commande pour voir ce que vous devez comparer s:uname with. Voir aussi :h matchstr()si vous avez besoin de comparer seulement une partie de la sortie de uname.

Riches
la source
2

Avec beaucoup de machines, lister tous les noms d’hôtes .vimrcpeut devenir fastidieux, il pourrait être plus facile de faire la distinction entre différentes 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
philant
la source
Malheureusement, cela casse sur les machines Windows.
oligofren
1

Vous pouvez simplement placer les éléments spécifiques au système d'exploitation dans un fichier .gvimrc personnalisé pour chaque ordinateur et utiliser un fichier .vimrc commun sur chacun d'eux. Les deux fichiers sont lus au démarrage de GVim, seul le fichier .vimrc est lu au démarrage de Vim non-gui.

Neil
la source
1

En ce qui concerne la séparation entre Linux et Windows - vous pouvez simplement mettre différents paramètres dans .vimrcet _vimrc, en conséquence.

Bjauy
la source