¿Cómo puedo canalizar la salida de un comando de shell en un nuevo búfer en Vim? Lo siguiente obviamente no funcionaría, pero puedes ver a lo que me refiero:
:!echo % | :newtab
¿Cómo puedo canalizar la salida de un comando de shell en un nuevo búfer en Vim? Lo siguiente obviamente no funcionaría, pero puedes ver a lo que me refiero:
:!echo % | :newtab
Respuestas:
No puede canalizar la salida de un comando de shell en un comando que crea un nuevo buffer, pero puede crear un nuevo buffer y leer la salida de un comando de shell en ese buffer con una entrada en la línea de comando de Vim. Una versión funcional de su ejemplo sería
:tabnew | r !echo <c-r>=bufname("#")<cr>
Tenga en cuenta que el símbolo de tubería en este caso es un separador entre los comandos de Vim ex, no la tubería de la carcasa. Ver también
:help :tabnew
:help :r!
:help :bar
:r!echo
sin alterar el búfer.
Esto es lo que hago. Se menciona en los comentarios en las respuestas anteriores.
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Ejemplo 1 : buscar todos los archivos de texto en/tmp
:new | r ! find /tmp -name '*.txt'
Ejemplo 2 : está editando el archivo foo.txt y desea ejecutar ls -la foo.txt
y obtener la salida en un búfer:
:new | r ! ls -la #
El #
se reemplaza con el nombre del archivo del búfer original que está editando. Esto es particularmente útil para comandos de control de fuente ad-hoc, p. Ej.
:new | r ! hg annotate -un #
:new
crea una división horizontal, úsela :vnew
si desea una división vertical en su lugar y :tabnew
para una nueva pestaña.
:tabnew | enew | r ! <your shell cmd>
funciona para mi.
Si realmente necesita almacenar el resultado en un nuevo búfer, pero necesita información del antiguo búfer actual, puede usar system()
:
:let res = system('echo '.expand('%'))
:tabnew
:put=res
o almacenar el nombre del búfer actual para más tarde :
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>