Compiler du code depuis vim


18

Nouveau sur vimet et je veux pouvoir compiler du code de l'intérieur vimsans exécuter un nouveau terminal et appeler le compilateur.

Comment dois-je procéder? Notez que cette exigence n'est pas limitée à gccseulement, j'ai parfois besoin d'appeler pythonégalement sur le script actuel sur lequel je travaille, donc vous avez l'idée ...

Réponses:


25

Écrivez un Makefile, alors vous pouvez simplement:

:make

de l'intérieur de vim. Et si la compilation échoue:

:copen

vous montrera un avertissement et des erreurs. En les sélectionnant, vous accédez au fichier et à la ligne appropriés.


12

Dans vim, le fichier actuel peut être appelé %, donc

:!python %

Voir :he cmdline-special(ou ici )


6

Si vous n'aimez pas les makefiles pour une raison quelconque, vous pouvez appeler n'importe quelle commande avec:!

Par exemple, vous pouvez utiliser ":! Javac * .java && java Foo" pour compiler et exécuter un simple programme java. Vous pouvez également appeler d'autres systèmes de build (scons, cmake, ...) de cette façon.


3

Essayez le plugin quickrun pour Vim. La page comprend un lien vers github, qui est la dernière version et ce que j'utilise.

L'avantage d'utiliser ce plugin plutôt que de le faire :!, la sortie de la commande sera collectée et affichée dans une fenêtre divisée.

De plus, par défaut, ce plugin suspendra votre instance de vim lorsque vous lui demanderez d'exécuter une commande, mais il peut être configuré pour exécuter la commande de manière asynchrone, ce que je fais. Lisez la documentation pour plus de détails.


3

J'utilise un vim avec un interpréteur Python compilé.

Je source un fichier python qui a cette fonction:

def pyterm(filename="", interactive=1):
    cmd = "%s %s %s " % (PYTHON, "-i" if interactive else "", filename)
    if "DISPLAY" in os.environ:
        return run_config(os.environ.get("XTERM"), cmd)
    else:
        return os.system(cmd)

Et mappez-le sur un raccourci clavier:

nmap ;ru :update<CR>:python pyterm(vim.current.buffer.name, 0)<CR>
nmap ;ri :update<CR>:python pyterm(vim.current.buffer.name, 1)<CR>

J'avais précédemment défini certaines variables d'environnement pour déterminer le terminal exact à exécuter si vous utilisez gvim, ou dans le même terminal si ce n'est pas dans un X.

Ensuite, je tape généralement '; ri' dans un tampon Python pour l'exécuter (généralement pour le tester).


2

Vim peut être utilisé pour compiler en utilisant gnu make sur le fichier courant - même s'il n'y a pas de Makefile pour le fichier (pour plus de détails, voir ici ):

:make %:r

De cette façon, vim vous donne accès au retour d' erreur de correction rapide de la :help quickfixliste compiler ( ) - :cnErreur suivante, Erreur :cpprécédente, :cwNouvelle liste des erreurs.

Si vous n'avez pas gnu make, vous pouvez définir la variable makeprg (changer en g ++ si vous compilez C ++):

:se makeprg=gcc\ -o\ %<\ %

puis utilisez la commande vim make pour compiler le fichier actuel et obtenir une liste rapide d'erreurs dans vim:

:make

EDIT: Si vous souhaitez également exécuter l'exécutable compilé à partir de vim, vous pouvez le faire ('!' S'exécute, '%: r' est le nom de fichier sans son suffixe):

:!./%:r

1

En cas de gcc, python etc. vous pouvez l'appeler avec un deux-points (:!)

Par exemple. :!python something.py


0
!gcc file.c && ./a.out

Cela compilera votre fichier C et exécutera l'exécutable demandant l'entrée dans la fenêtre vim.


1
Une réponse plus complète inclurait le ':', et pour le rendre plus polyvalent, vous pouvez changer 'file.c' pour l'opérateur de fichier actuel '%'::!gcc % && ./a.out
Pierz

Je fais quelque chose de similaire dans mon .vimrc, je mappe Command + Shift + Rà:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.