En Vim, ¿cuál es una forma elegante de obtener resultados de la línea de comandos?

14

Si estoy en Vim y quiero obtener algún resultado de la línea de comandos y agregarlo a mi archivo actual, puedo ejecutar esto:

:! echo "foo" >> %

Eso agregará "foo" a mi archivo actual, y tendré que volver a cargar.

¿Hay una manera más elegante de hacer esto? ¿Tiene esa salida en un búfer que puedo pegar, por ejemplo?

Nathan Long
fuente

Respuestas:

24

Si:

:r !echo "foo"

Ver

:help :r!

Eso insertará la salida del comando después de la línea actual. Si desea capturar la salida del comando en un registro que puede pegar, puede hacer esto:

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

Ahora la salida del comando (incluida la nueva línea final) está en el registro a. Ver

:help let-@
:help system()
garyjohn
fuente
Después de mirar la ayuda y experimentar, veo que 1) :res la abreviatura de "leer" (por lo que puede escribir 'leer' o simplemente 'r' y es el mismo comando), y 2) hacer :r path/to/foo.txtinsertará el contenido de ese archivo después del cursor.
Nathan Long
Además, no sabía sobre la systemllamada. ¡Eso es genial!
Nathan Long
1
Tampoco sabía que podía establecer manualmente registros como let @a = 'foo'. Una idea genial sería, después de buscar y reemplazar, podría guardar el término de búsqueda en un registro para pegarlo en otro lugar haciendo let @a = @/: "hacer que un registro contenga lo que contiene el registro /, es decir, mi última búsqueda".
Nathan Long
1
@Nathan Long: De nada. Otras formas de pegar desde el / registro son 1) ejecutar :put /para colocar el contenido del registro en la siguiente línea y 2) mientras está en modo de inserción, escribir Ctrl-R seguido de /insertar el contenido del registro en la posición del cursor. Para más información sobre esos, vea :help :puty :help i_CTRL-R.
garyjohn