2010-12-10 25 views
2

J'ai essayé de créer une fonction dans mon fichier de configuration de vim, de sorte que je puisse "compiler et exécuter" selon le type de fichier (je travaille principalement avec Fortran, C et Python). Il a fait le travail, sauf que chaque fois après l'exécutable compilé a été couru, il y aurait une notification au fond de mon vim en disant:Utilisation de l'instruction if dans le fichier _vimrc?

Erreur détectée lors de la fonction de traitement CompileRun: ligne 17: E171: Missing: endif

Je n'ai aucune idée de ce que signifie "ligne 17" et "E171" parce qu'ils ne peuvent pas être liés avec le fichier source ou le fichier _vimrc, il semble également que l'instruction if est fermée. J'ai beaucoup googlé sans trouver de réponse. Ma fonction est la suivante:

map <F4> : call CompileRun()<CR> 

func! CompileRun() 

    if &filetype == 'fortran' 
    exec "w" 
    exec "!gfortran % -o %<" 
    exec "!%<.exe" 
    exec "i" 

    elseif &filetype == 'c' 
    exec "w" 
    exec "!gcc % -o %<" 
    exec "!%<.exe" 
    exec "i" 

    elseif &filetype == 'python' 
    exec "w" 
    exec "!python %<.py" 
    exec "i" 
    endif 
endfunc 
+0

Je ne reçois pas d'erreur lors de la copie du corps de la fonction dans mon vim (7.3), l'enregistrer comme test.vim, approvisionnement le fichier et l'appel de CompileRun() ... – eckes

+0

J'utilise aussi vim 7.3, mais vim insère toujours une partie de la fonction dans mon code après l'avoir compilé et exécuté. Si cela ne vous arrive pas, je suis totalement confus ... – mayasky

+0

Je suppose que vous vouliez utiliser 'call feedkeys (" i ")' au lieu de 'exec" i "' ... – anishsane

Répondre

2

C'est probablement parce qu'une de vos commandes lance quelque chose.

BTW, hors-sujet:

  • un coup d'oeil à :make et &makeprg
  • gnumake n'a pas requis une makefile pour des projets mono-fichier; donc juste: :make %< suffira, et pas besoin de spécifier un &makeprg non plus. (Il fonctionne à coup sûr avec C, C++, et probablement fortran)
  • :exec est complètement inutile dans vos appels.
  • Etes-vous sûr de vouloir exécuter :insert à la fin de vos fonctions? Essayez sans cet appel.
  • Vous pouvez restreindre votre correspondance en mode normal. Il ne fonctionnera pas dans d'autres modes comme ça =>

    nnoremap <F4> :call Compile()<cr>

+0

Qu'est-ce qui me dérange? le plus est l'erreur "Missing: endif". Je ne suis pas familier avec le script de vim et la fonction est basée sur ce que j'ai trouvé à travers google. "exec" est utile car sans lui toutes les commandes deviennent des commentaires ... J'exécute l'insert pour pouvoir éditer et corriger l'erreur si cela arrive – mayasky

+1

L'erreur "missing endif" est typique de l'exception lancée dans un bloc if. : exe, ET les citations sont parfaitement inutiles ici. –