¿Cómo redirijo la salida del comando a vim en bash?

87

Estoy tratando de redirigir la salida de un comando bash a un nuevo archivo.

Si pruebo la tubería de la siguiente manera:

ls -la | vim

Bash me muestra los errores:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Sé que puedo abrir Vim y luego usar:

:r !ls -la

Pero, ¿hay alguna manera de hacer esto en bash, de modo que Vim se abra y la salida se pegue allí automáticamente?

faizal
fuente

Respuestas:

140

Puede usar la sustitución de procesos (esto también funciona con aplicaciones que no pueden leer STDIN):

vim <(ls -la)

O use vimla función para leer STDIN:

ls -la | vim -
caos
fuente
2
<(ls -la)es en realidad la sustitución de procesos en lugar de la sustitución de comandos .
Eliah Kagan
1
Realmente me gusta la opción de vim, me permite buscar, encontrar y guardar la salida fácilmente de los volcados de datos.
Josue Alexander Ibarra
38

Estás muy cerca por tu cuenta. Solo te faltaba un personaje.

ls -la | vim -
Cris Holdorph
fuente
10
Bueno, técnicamente son dos personajes. ;)
Cory Klein
19

Aquí hay otro enfoque, con suerte para enseñarle a alguien algo nuevo.

Si sabe que el comando :r !ls -lafunciona dentro de vim, puede hacer lo siguiente para abrir vim y hacer que ejecute el comando tan pronto como se abra, directamente desde bash:

vim -c ':r! ls -la'

Esto es equivalente a abrir y vimluego ejecutar el comando :r! ls -la. Esto debería funcionar con cualquier vimcomando, donde el comando viene después de la -copción.

Alaa Ali
fuente
12

Puedes decirle a vim que abra stdin:

ls -la | vim -
dudoso
fuente
1

Si su objetivo es simplemente obtener el resultado en un archivo de texto, entonces no necesita invocar vim. Bash puede hacerlo solo con

ls -la > outputfile.txt
Jake Stewart
fuente
1

setlocal buftype=nofile

Esta es una buena opción si va a crear un alias para reemplazar less:

seq 100 | vim +':setlocal buftype=nofile' -

¡Ahora no necesita escribir el! abandonar.

Otra opción es:

seq 100 | vim +'nnoremap q :quit!' -

para que puedas salir con solo q<enter>.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
Buena idea. ¡Definitivamente más corto que escribir tanto tiempo! :)
kode