2010-04-13 10 views

Répondre

82

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

+16

+1 de remarquer que% est substitué par le nom de fichier. –

+0

J'aime votre réponse. Je veux le rendre final. S'il vous plaît guider. – Coder

+0

J'ai besoin de 15 votes pour le rendre final :( – Coder

31

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.

+1

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

5

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 fonctionne make

  • :!./%<<CR> exécute un programme (%) sans l'extension (<)

+1

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 : w : silencieux! make :! echo "--------------- En cours d'exécution ---------------"; écho; command time -v "./% <"' – atomictom

+0

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

2

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\ % 
1

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.

+1

jusqu'à présent la meilleure approche * poids léger * compiler les petits programmes cpp directement à partir de vim – Konrad

0

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 .

4

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.

+2

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

5

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.

+0

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

+0

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

0

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> 
Questions connexes