48 votes

Rediriger la sortie de la commande shell (!) dans un nouveau tampon dans Vim

Comment puis-je rediriger la sortie d'une commande shell dans un nouveau tampon dans Vim? Ce qui suit évidemment ne fonctionnerait pas, mais vous pouvez voir ce que je veux dire:

:!echo % | :nouvelonglet

34voto

Unnati Gutpa Points 11

Vous ne pouvez pas rediriger la sortie d'une commande shell vers une commande qui crée un nouveau tampon, mais vous pouvez créer un nouveau tampon et lire la sortie d'une commande shell dans ce tampon avec une seule entrée sur la ligne de commande de Vim. Une version fonctionnelle de votre exemple serait

:tabnew | r !echo =bufname("#")

Notez que le symbole de barre verticale dans ce cas est un séparateur entre les commandes ex de Vim, et non le pipe du shell. Voir aussi

:help :tabnew
:help :r!
:help :bar

24voto

John Liu Points 71

Voici ce que je fais. C'est mentionné dans les commentaires des réponses ci-dessus.

:new | r ! 
:new | r !  #   (# est remplacé par le nom du fichier)

Exemple 1 : Trouvez tous les fichiers texte dans /tmp

:new | r ! find /tmp -name '*.txt'

Exemple 2 : Vous modifiez le fichier foo.txt et vous voulez exécuter ls -la foo.txt et obtenir la sortie dans un tampon :

:new | r ! ls -la #

Le # est remplacé par le nom du fichier du tampon d'origine que vous modifiez. C'est particulièrement utile pour les commandes de contrôle de source ad hoc, par exemple :

:new | r ! hg annotate -un #

:new crée une division horizontale, utilisez :vnew si vous voulez une division verticale à la place et :tabnew pour un nouvel onglet.

5voto

justrajdeep Points 151
:tabnew | enew | r ! 

ça fonctionne pour moi.

2voto

Wes P Points 3153

Si vous avez vraiment besoin de stocker le résultat dans un nouveau tampon, mais que vous avez besoin d'informations du vieux tampon actuel, alors vous pouvez utiliser system():

:let res = system('echo '.expand('%'))
:tabnew
:put=res

ou stocker le nom du tampon actuel pour plus tard:

:let bn = expand('%')
:tabnew | :r!echo =bn

0voto

Jay-Pi Points 1

@Ciro Santilli a lié la réponse https://stackoverflow.com/a/3826018/9306292

:enew | .! 

Si vous voulez garder votre configuration simple, utilisez l'un de ceux-ci :

v / s / votre raccourci touche de tabulation, c'est-à-dire t

et ensuite

:%!command

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X