¿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?

Respuestas:



38

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

ls -la | vim -

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.


12

Puedes decirle a vim que abra stdin:

ls -la | vim -

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

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>.


Buena idea. ¡Definitivamente más corto que escribir tanto tiempo! :)
kode
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.