3 votes

Comment exécuter g++ et afficher les résultats dans une division horizontale dans VIM

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.

2voto

Nathan Points 334

:make puis :copen devrait faire l'affaire. Vous pouvez également fermer la fenêtre avec :cclose.

1voto

TimK Points 1460

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.

0voto

Sumudu Fernando Points 1215

À 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X