Est-il possible d'avoir la sortie d'un:! commande dans une division plutôt que dans la fenêtre entière?

11

Si j'ai une session vim avec deux divisions, lorsque j'exécute une :!commande, le résultat est affiché dans toute la fenêtre. Est-il possible d'avoir la sortie affichée uniquement sur le split actif?

drs
la source
2
Non, ce n'est pas possible. La sortie if :!est affichée dans la ligne de commande, dont il n'y en a qu'une, et ne peut être qu'en bas de l'écran. Le mieux que je puisse penser est de créer un nouveau buffer /: split sous l'actuel ...
Martin Tournoij
@Carpetsmoker, Pour moi, la sortie de :!ne va pas à la ligne de commande. Au lieu de cela, la session vim disparaît et toute la fenêtre du terminal affiche la sortie du terminal, y compris ce qui a été imprimé avant d' vimêtre invoqué.
drs
1
Peut-être que cela est dû au terminal que vous utilisez et / ou au TERMparamètre?
Martin Tournoij
Cette différence a à voir avec altscreen (in screen) ou alternative-screen (in tmux).
tommcdo

Réponses:

8

Vous pouvez utiliser cette commande:

:new | 0read ! command

Cela ouvrira une nouvelle division et placera la sortie de la commande dans cette division ( mais pas dans la division actuellement active comme vous l'avez mentionné ).

nouveau - crée une nouvelle scission

read - pour obtenir la sortie de la commande

commande - commande réelle

meain
la source
6

Vous pouvez faire une commande pour faire exactement ceci:

  1. Ouvrir un nouveau split (ou onglet)
  2. Exécutez une commande et affichez les résultats dans cette division (ou onglet)

La commande serait quelque chose comme ceci:

:Rsplit command

ou

:Rtab command

Dans votre, .vimrcvous pouvez écrire ceci:

" execute a command and show its output in a split window
command! -nargs=* -complete=shellcmd Rsplit execute "new | r! <args>"

" execute a command and show its output in a new tab
command! -nargs=* -complete=shellcmd Rtab execute "tabnew | r! <args>"

Vous pouvez trouver comment créer vos propres commandes avec :help :command.

Lucas Gabriel Sánchez
la source
1

Ce ne sera pas possible. Vous devrez diviser votre écran avec un autre outil comme tmux (IIRC), screen, ...

Si vous n'avez pas besoin d'interagir avec le programme exécuté, vous pouvez cependant importer ses résultats directement dans n'importe quelle fenêtre (au sens vim :h windows) de votre choix :r!command line.:h :r!

Luc Hermitte
la source