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 ...

phunehehe
la source

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.

chris
la source
12

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

:!python %

Voir :he cmdline-special(ou ici )

glenn jackman
la source
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.

stribika
la source
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.

Shrikant Sharat
la source
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).

Keith
la source
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
Pierz
la source
1

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

Par exemple. :!python something.py

le JinX
la source
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.

Hasil Sharma
la source
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
0

Concernant le cas particulier de la compilation du code source.

Et si vous avez quelque chose qui peut compiler python, définissez en makeprgconséquence.

Luc Hermitte
la source