Impossible de compiler avec Vim

Résolu
Bonjour,

J'essaie désepérement de compiler un simple programme C sous Vim mais ça ne
fonctionne pas (je suis sous Win XP).
J'ai suivi l'exemple de la doc: http://vim.dindinx.net/traduit/html/usr_30.txt.php#30.1
mais quand je tape ':make', le prompt me dit que la commande n'est pas reconnue.
(je précise que lorsque je compile directement par le prompt ça marche).
J'ai evidemment vérifié que Vim se trouve bien dans le bon répertoire
en tapant ':pwd' ou encore ':cd', et apparement c'est bon.

Par contre j'ai découvert que lorsque je remplace (avec regedit) le répertoire par défaut du prompt (D:\ chez moi) par le répertoire dans lequel se trouvent les sources (D:\prog\hello) ça marche.
Evidemment c'est pas pratique du tout car je dois changer le répertoire par défaut pour chaque
nouveau programme à compiler.

Est ce que quelqu'un pourrait m'aider parce que là je vois vraiment plus.

Merci
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. Modérateur
    Tu as oublié le point d'exclamation !
    int main(){
        std::cout << "plop" << std::endl;
        return 0;
    }
    ~
    ~
    ~
    :!g++ plop.cpp
    

    ce qui donne
    (mando@aldur) (~) $ vi plop.cpp
    
    
    Appuyez sur ENTRÉE ou tapez une commande pour continuer
    

    Quand je sauve et quitte :
    (mando@aldur) (~) $ ./a.out
    plop

    Ce qui donne bien le résultat escompté. Le principe est bien entendu le même avec make, il faut juste que le Makefile soit dans le répertoire depuis lequel tu as ouvert vim.

    Bonne chance
    1. Merci pour ta réponse mais le point d'exclamation n'y change rien.
      Toutefois dans la doc c'est bien ':make' sans point d'exclamation.
      J'ai remarqué qu'avec MinGW l'executable se nomme mingw32-make.exe et non make.exe.
      J'ai donc tapé dans Vim:
      :set makeprg=mingw32-make
      puis :make
      Mais la seul chose que j'obtiens c'est :

      mingw32-make: *** No targets specified and no makefile found.

      Si quelqu'un a une idée.
      1. Modérateur
        En fait les deux marchent. Avec un point d'exclamation tu lances n'importe quelle commande shell depuis vim (en particulier make, dans ton cas mingw32-make). Avec :make, tu dis à vim de taper dans le makefile (et il utilise pour ça la variable makeprg). Les deux méthodes marchent chez moi.

        Cependant dans ton cas, vim trouve ta commande make (enfin mingw32-make) mais pas le makefile. Pour moi c'est sans doute parce que tu as lancé vim dans un répertoire ne contenant pas de fichier "Makefile" ou "makefile". Si je reprends mon exemple en ajoutant ce makefile :
        (mando@aldur) (~) $ cat Makefile
        all:
                g++ plop.cpp

        ensuite dans vim :
        #include <iostream>
        
        int main(){
            std::cout << "plop" << std::endl;
            return 0;
        }
        ~
        ~
        ~
        ~
        :!make

        ce qui donne (de manière similaire à :make)
        (mando@aldur) (~) $ vi plop.cpp
        
        g++ plop.cpp
        
        Appuyez sur ENTRÉE ou tapez une commande pour continuer

        En particulier vérifie bien que tu as bien une tabulation (et pas des espaces) à la suite de ta cible (dans mon exemple all:) car sinon ton makefile ne peut pas marcher.

        Bonne chance
        1. J'ai enfin trouvé l'origine du pb !
          J'avais modifié l'emplacement du prompt par defaut
          avec regedit (en créant une clé (autorun) avec la valeur: cd/d D:\)
          de façon a avoir l'invite D:\> et pas C:\Documents and Settings\Tintin>
          Tout le pb vient de là.

          J'ai donc effacé la clé dans regedit (pour avoir à nouveau l'invite par défaut),
          et j'ai placé le repertoire contenant mon prog dans C:
          C:\hello
          et maintenant tout fonctionne avec Vim, (compilation, déplacement et positionnement
          dans les répertoires).
          Par contre je ne sais toujours pas pourquoi le fait de modifier l'emplacement du prompt par defaut a créé une tel pagaille avec Vim ni comment résoudre ce pb.
          En tous cas merci beaucoup pour ton aide.
          1. Modérateur
            Aucune idée je ne sais pas comment marche windows ;) L'important c'est que tu aies résolu ton problème !