Existe-t-il un moyen de compiler et d'exécuter un programme C à partir de VIM sans taper son nom de fichier?Comment exécuter un programme C à partir de VIM?
Répondre
:!gcc -o somename % && ./somename
Lorsque vous utilisez :!
,% sera remplacé par le nom du fichier ouvert. Lorsque votre projet prend de l'ampleur, vous pouvez également écrire un fichier makefile et compiler le projet en cours avec :make
, s'il y a des erreurs, vim y accédera automatiquement.
Utilisez le code de mappage suivant dans votre fichier .vimrc pour compiler et exécuter un fichier de programmation c.
map <F8> : !gcc % && ./a.out <CR>
La touche F8 permet d'exécuter le mappage. "%" doit prendre le nom de fichier actuel.
Ou, si vous souhaitez enregistrer le fichier en cours avant de compiler, utilisez
map <F8> :w <CR> :!gcc % && ./a.out <CR>
Ou plus idéalement, si vous souhaitez utiliser le fichier basename pas la valeur par défaut 'a.out que le fichier exécutable nom, utilisez ce qui suit:
map <F8> :w <CR> :!gcc % -o %< && ./%< <CR>
Dans la commande ci-dessus, "<" après "%" supprime l'extension et le point (foo.c => foo), donc "% <" est le fichier basename.
Vous pouvez trouver cette information et des informations similaires dans cmdline.txt. Commande dans vim: help: cmdline.txt
. Vous pouvez également trouver des détails spécifiques sur l'utilisation de "%" en utilisant :help filename-modifiers
dans vim.
S'il vous plaît noter qu'un caractère espace est valide commande de mode normal qui déplace le curseur d'un espace vers la droite, donc l'espace entre les deux commandes ex que vous avez enchaînées dans votre second mapping déplace si possible le curseur avant de compiler. – Ben
depuis la plupart du temps que vous utilisez un Makefile, en plus des réponses, j'aime aussi voir mes résultats dans un écran « autorisé »:
map <F10> :w<CR> :!clear; make<CR> :!./%<<CR>
:w<CR>
sauve le fichier:!clear; make<CR>
efface l'écran et fonctionnemake
:!./%<<CR>
exécute un programme (%
) sans l'extension (<
)
C'est vraiment cool, je l'ai édité un peu pour mes propres besoins, je me suis débarrassé de l'initiale "Appuyez sur ENTER ou tapez la commande pour continuer" avec "silent! clear ...". fait un séparateur entre la zone de "compilation" et la zone "en cours d'exécution" Je place des guillemets autour du nom du fichier pour éviter les problèmes avec les espaces Et enfin j'y ai placé la commande time pour une sortie supplémentaire utile.Voici ma version: 'noremap
Aussi, vous pouvez appliquer que le nom est le même que le nom du fichier (moins '.c') en utilisant make variables (ie si le nom de votre programme est stocké dans une variable appelée 'NAME', vous pouvez faire 'make NAME ="% <"'. Cela signifie que votre Makefile peut spécifier un autre nom par défaut, mais vous pouvez toujours utiliser ce raccourci dans Vim – atomictom
Je pensais juste que j'ajouter à ces réponses ici. Comme cela a été mentionné, vous pouvez utiliser la commande :make
dans vim. Ce qui n'a pas encore été mentionné, c'est que :make
peut invoquer d'autres programmes, autres que make
.
:set makeprg=gcc\ %
Fera :make
pour exécuter gcc
avec le symbole %
remplacé par le nom du fichier en cours.
Vous pouvez alors obtenir la fantaisie et faire
:set makeprg=gcc\ %\ &&\ ./a.out
et en tapant simplement :make
va compiler et exécuter votre programme. Vous pouvez le faire pour d'autres langues bien sûr.
:set makeprg=cabal\ repl
:set makeprg=python\ %
Après avoir fait quelques recherches (y compris cette page très), je me suis décidé d'ajouter ce raccourci:
map <F9> :w<CR> :!gcc % -o %<.x -Wall -Wextra 2>errors.err; cat errors.err<CR>
Vous pouvez également inclure -ansi -pedantic-errors
si vous voulez. Le fichier errors.err
vous aidera avec vi quickfix.
jusqu'à présent la meilleure approche * poids léger * compiler les petits programmes cpp directement à partir de vim – Konrad
Ajoutez ces trois lignes à votre fichier .vimrc
au FileType c set makeprg=gcc\ %
au FileType cpp set makeprg=g++\ %
map <F7>:make && ./a.out<CR>
Vous pouvez compiler et exécuter votre programme en appuyant sur la touche F7 .
Ajoutez cette ligne dans votre fichier vimrc
nnoremap <silent> <F8> :!clear;gcc % -o % && ./%<CR>
Maintenant, il vous suffit d'appuyer sur la touche f8 pour compiler et exécuter votre programme c.
Utilisez%: r au lieu de% pour les deux derniers% s ou il écrase votre fichier source.Je serais en train de modifier votre réponse, mais les réviseurs sont de mauvaise humeur aujourd'hui – woky
TL; DR Non Makefile est nécessaire, peaufinage &makeprg
est aussi complètement inutile, et pourtant :make %<
suffit de compiler à partir Vim.
Réponse longue:
dupliquer une réponse que je donnais dans une "question double" fermée. Considérant que nous utilisons vim, et non vi, :make
est le chemin à parcourir.
Sous Linux (cela s'applique également à cygwin, mais pas à Windows - dans le cas de Mingw, voir les autres réponses qui modifient &makeprg
, laissez-le tranquille sinon) les systèmes où gnumake est installé, si vous ne le faites pas t avoir un Makefile dans votre projet, et si votre projet est constitué d'un seul fichier, tapez simplement :make %<
. Ce sera suffisant (vous pouvez jouer avec $CXXFLAGS
, $CFLAGS
et $LDFLAGS
pour régler les options de compilation). Ensuite, pour exécuter le programme, tapez :!./%<
ou, avec les versions ultérieures de vim, exécutez :terminal ./%<
.
Si votre projet est constitué de plusieurs fichiers, vous aurez besoin d'un fichier Makefile pour tirer parti de :make
. Si vous gérez votre projet avec CMake, et si vous compilez votre projet dans un répertoire (ou plusieurs -> debug, release, ...) en dehors de l'arborescence des sources, l'intégration nécessitera un plugin. AFAIK, je suis le seul à proposer un tel plugin: BuildToolsWrapper intègre la gestion de CMake (choix du répertoire de construction, possibilité de choisir entre le debug, ou la release, ou n'importe quel répertoire de construction). Il doit être couplé avec l'un des plugins local_vimrc.
Dans tous les cas, appeler directement le compilateur depuis l'intérieur (ou à l'extérieur) de Vim avec :!g++ -o %< %
ou tout ce que nous faisions il y a 15 ans sur vi. Vim a une fonctionnalité formidable: il peut intégrer (oui, comme dans IDE) le compilateur. Voir :h quickfix
. Naviguer entre les erreurs directement depuis l'éditeur est beaucoup plus facile que d'extraire une ligne d'erreur avec nos yeux, en tapant le numéro de ligne dans l'éditeur, en revenant à l'interpréteur de commandes pour voir exactement ce qui a été rejeté, ... mais en C++ quand nous essayons d'appeler une surcharge qui n'existe pas, nous ne pouvons pas travailler de cette façon (basculer entre l'éditeur et le shell).
Enfin, si vous voulez compiler sur une seule touche les projets mono-fichier, vous pouvez ajouter dans votre .vimrc:
nnoremap <silent> <f7> :make %<<cr>
Si vous souhaitez adapter automatiquement la commande de compilation en fonction du type de projet de projet mono-fichier animal de compagnie, ou projet multi-fichiers du monde réel, bien, plus de câblage est nécessaire, et c'est ce BTW does - il lit diverses options pour savoir quoi faire.
Dernière remarque: &makeprg
est préférable de laisser seul, au moins pas réglé sur g ++/gcc/clang/clang ++/gfortran/... Parce que, chaque fois que vous changez votre langue, vous devrez le changer (sauf si vous utiliser :setlocal
). Avec la solution que je recommande, si je veux utiliser clang ++ au lieu de g ++, tout ce que j'ai à faire est de définir: :let $CXX='clang++'
(ou $CC
en C), puis appelez :make %<
. Je peux même définir :let $CXXFLAGS='-std=c++11'
pour compiler en C++ 11 - la même variable sera utilisée pour activer les avertissements, pour utiliser un désinfectant, etc.
Je vois. Cette réponse était sur [une question qui a été fermée] (http://stackoverflow.com/questions/21474662) en tant que doublon à la question en cours – Mogsdad
En effet, j'ai posté ici parce que l'autre Q/A est marqué comme doublon et fermé et pourtant toutes les réponses que je vois ici sont tout à fait inefficaces icient (appel direct de gcc sans utiliser la fenetre quickfix, ou ils mettent 'makeprg' alors qu'il n'est pas requis avec un gnumake correctement configure). –
Il peut être utile d'ajouter que le plugin SingleCompile
offre cette fonctionnalité pour C et d'autres langues comme indiqué par l'auteur:
SingleCompile est un plugin Vim visant à rendre plus commode de compilation ou exécuter un fichier source unique sans quitter Vim. Considérez cette situation : vous venez d'écrire un petit fichier source C pour un test minuscule , mais vous devez écrire un Makefile pour le compiler, ou quitter Vim pour le compiler , ou le compiler en utilisant "! Gcc" sans fonction quickfix parce que la commande make de Vim utilise uniquement la commande "make"? Ce plugin va vous aider.
applications suggérées pour F9 et F10:
nmap <F9> :SCCompile<cr>
nmap <F10> :SCCompileRun<cr>
- 1. Exécuter un programme à partir d'un programme C
- 2. Comment exécuter un script bash à partir du programme C++
- 3. Exécuter un programme à partir de MemoryStream
- 4. Exécuter un programme externe à partir du code C#
- 5. Comment exécuter un programme externe à partir de Java?
- 6. Comment exécuter un programme Java à partir d'un répertoire différent?
- 7. Comment exécuter un programme externe via un programme C#?
- 8. Comment créer un programme à partir de mon code C++?
- 9. exécuter un programme à partir d'un service Windows
- 10. Exécuter "echo $ PATH" à partir d'un programme c?
- 11. Comment exécuter un programme spécifié?
- 12. Exécuter un programme C en python?
- 13. Comment appeler un programme externe à partir de vim avec du texte marqué comme param?
- 14. (IronPython) Exécuter PythonFunction à partir de C#
- 15. Comment exécuter un programme manuellement vs exécuter un programme de studio visuel diffèrent?
- 16. Comment exécuter un programme à partir de Python? os.system échoue en raison d'espaces dans le chemin
- 17. exécuter/ouvrir un programme en C#
- 18. C# Exécuter à partir des octets
- 19. Comment envoyer un paquet ARP à partir d'un programme C?
- 20. exécuter un script SQL programme
- 21. Comment exécuter un programme C dans l'invite DOS
- 22. Comment exécuter T-SQL à partir de C#?
- 23. Comment démarrer un programme C# à partir d'un autre programme C# dans la même carte?
- 24. Comment exécuter un fichier batch à partir de Java?
- 25. Compiler, exécuter et retourner la sortie du programme C++, en toute sécurité à partir de PHP
- 26. exécuter un programme Java
- 27. Pouvez-vous exécuter le code C# à partir de C++?
- 28. Comment puis-je exécuter un fichier de script SQL à partir du programme d'installation de msi (C#)?
- 29. Comment exécuter un package SSIS à partir de .NET?
- 30. Comment exécuter un programme en utilisant Maven?
+1 de remarquer que% est substitué par le nom de fichier. –
J'aime votre réponse. Je veux le rendre final. S'il vous plaît guider. – Coder
J'ai besoin de 15 votes pour le rendre final :( – Coder