Dans Vim, quelle est une manière élégante de récupérer la sortie de la ligne de commande?

14

Si je suis dans Vim et que je veux obtenir une sortie de la ligne de commande et la coller sur mon fichier actuel, je peux exécuter ceci:

:! echo "foo" >> %

Cela ajoutera "foo" à mon fichier actuel, et je devrai recharger.

Existe-t-il une façon plus élégante de le faire - que cette sortie soit placée dans un tampon que je peux coller, par exemple?

Nathan Long
la source

Réponses:

24

Oui:

:r !echo "foo"

Voir

:help :r!

Cela insérera la sortie de la commande après la ligne actuelle. Si vous souhaitez capturer la sortie de la commande dans un registre que vous pouvez coller, vous pouvez le faire:

:let @a = system('echo "foo"')

Maintenant, la sortie de la commande (y compris la nouvelle ligne de fin) est dans le registre a. Voir

:help let-@
:help system()
garyjohn
la source
Après avoir regardé l'aide et expérimenté, je vois que 1) :rest l'abréviation de "lire" (vous pouvez donc taper "lire" ou simplement "r" et c'est la même commande), et 2) faire :r path/to/foo.txtinsérera le contenu de cette fichier après le curseur.
Nathan Long
Aussi - je ne connaissais pas l' systemappel. C'est génial!
Nathan Long
1
Je ne savais pas non plus que vous pouviez définir manuellement des registres comme let @a = 'foo'. Une idée intéressante serait, après avoir fait une recherche et remplacé, vous pouvez enregistrer le terme de recherche dans un registre pour le coller ailleurs en faisant let @a = @/- "faire en sorte qu'un registre contienne ce que contient le / registre, à savoir ma dernière recherche".
Nathan Long
1
@Nathan Long: Je vous en prie. Les autres façons de coller à partir du registre / sont 1) d'exécuter :put /pour placer le contenu du registre sur la ligne suivante et 2) en mode d'insertion, de taper Ctrl-R suivi de /pour insérer le contenu du registre à la position du curseur. Pour en savoir plus, voir :help :putet :help i_CTRL-R.
garyjohn