2010-12-02 23 views
0

J'ai dans mon .vimrc:Est-ce que autocmd est toujours appelé dans un vimrc?

fun! MySys() 
    if has('win16') || has('win32') || has('win64') 
     return "win" 
    endif 
endfun 

Et dans mon .gvimrc:

if MySys() == "win" 
    autocmd GUIEnter * simalt ~ x " start maximized" 
endif 

Pour une raison quelconque, le autocmd est appelé quand j'ouvre MacVim dans une station de travail Mac. Il ne devrait pas parce que je suis sur un mac et l'autocmd est dans une victoire si.

Quel problème cela peut-il être?

Répondre

2

La raison en est que vous faites une comparaison étrange.

La fonction MySys() renverra 1 si vous utilisez Windows et 0 si vous ne l'êtes pas. Vous comparez alors 0 pour "gagner", ce qui (pour des raisons que je ne comprends pas vraiment) produit une correspondance.

Que diriez-vous de changer à ceci:

fun! MySys() 
    if has('win16') || has('win32') || has('win64') 
     return "win" 
    elseif has('mac') || has('maxunix') 
     return "mac" 
    elseif has("unix") || has("win32unix") 
     " Unix or Cygwin (which acts like Unix) 
     return "unix" 
    else 
     return "other" 
    endif 
endfun 

(non testé)

+0

@AI: J'ai changé ma question. J'ai collé la mauvaise fonction. –

+1

La comparaison d'origine a été évaluée comme vraie, je pense, parce que dans une comparaison entre une chaîne et un nombre, Vim essayera toujours de convertir la chaîne en nombre. Par exemple, 0 == 'win' est vrai, car str2nr ('win') = 0. D'autre part, 0 == '3' sera faux, puisque str2nr ('3') est égal à 3. –

+0

Même en utilisant cette approche, la ligne avec l'autocmd continue d'être évaluée. J'ai essayé ': echo a (' win32 ') dans mon vim et en effet il renvoie 0. –