J'utilise cette commande: !g++ % -g -lm && a.exe & pause Le résultat apparaît dans une nouvelle fenêtre de commande. J'utilise gvim7.3. Comment puis-je faire en sorte que VIM affiche le résultat dans la même fenêtre (split horizontal)? Merci d'avance.
Réponses
Trop de publicités?Essayez ceci :
:new +r\ !g++\ #\ -g\ -lm
Cela ouvre une nouvelle "fenêtre" et lit la sortie de la commande g++ dedans. Notez que vous devez utiliser # au lieu de % car vous devez basculer vers un nouveau tampon.
Je ne suis pas sûr de comment faire fonctionner &&, donc je créerais juste un script qui compile et exécute.
Vous voudrez peut-être également faire "set nomod" pour pouvoir fermer cette fenêtre sans enregistrer le fichier.
À partir de mon .vimrc
, une fonction qui fait quelque chose de similaire à ce que vous voulez. J'utilise vim pas gvim, donc j'espère que cela utilise toujours la même convention pour le répertoire de travail. Vous devrez utiliser le plugin filetype
pour que les autocommandes fonctionnent (la fonction appelle celle de donc soyez conscient de cela). Cela passe en mode quickfix s'il y a une erreur de compilation. De plus, il exécute le programme avec un fichier d'entrée s'il est présent (il devrait être évident comment supprimer cette fonctionnalité). Encore très expérimental donc les commentaires sont les bienvenus!
function! MakeAndRun()
w
let nomProg = expand('%:r')
if filereadable(nomProg . '.in')
let shCmd = 'time ./' . nomProg . ' < ' . nomProg . '.in 2>&1'
else
let shCmd = 'time ./' . nomProg . ' 2>&1'
endif
execute "normal \"
call setqflist([])
redraw | echo 'Compilation de ' . nomProg
silent! belowright new Résultats\ d'exécution
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap nonumber
autocmd WinEnter if winnr('$') == 1 | :q! | endif
execute 'silent %! make ' . nomProg
if v:shell_error
setlocal buftype=quickfix
cbuffer
execute 'wincmd p'
setlocal statusline=%qRésultats\ d'exécution
else
resize 4
redraw | echo 'Programme en cours d'exécution... pour arrêter'
execute 'silent $read !'. shCmd
endif
normal gg
execute 'resize ' . min([12, line('$')+1])
execute 'wincmd p'
endfunction
autocmd FileType cpp nnoremap :call MakeAndRun()
autocmd FileType cpp nnoremap :if bufexists('Résultats d'exécution')\
\| execute bufwinnr('^Résultats d'exécution$') . 'wincmd w'\
\| :q!\
\| endif
autocmd FileType cpp imap
autocmd FileType cpp imap