Cómo usar una tubería para editar un archivo con vi


15

Digamos que tengo un archivo llamado file.txt. En él está el nombre de un archivo que quiero editar con vi. Quiero hacer algo como esto para poder editar el archivo:

cat file.txt | vi

Sin embargo, eso no funciona. ¿Cómo puede hacerse esto?

Para aclarar cosas:

Aquí están los contenidos de file.txt:

textfile

Por lo tanto, quiero enviar de alguna manera el contenido de file.txt a vi para que ocurra lo mismo que cuando escribo vi textfile.

El contenido de file.txt puede cambiar. Quiero que vi edite cualquier archivo que esté listado en file.txt.


No creo que vi = vim. No sé si eso marca la diferencia para esta pregunta, pero su etiqueta es engañosa.
soandos

Creo que puede haber más en su pregunta que está tratando de hacer. Abrir un archivo nombrado arbitrariamente es el uso base de vi. es decir: vi file.txt. ¿Hay algo más avanzado que intentas hacer?
camster342

vi inicia vim en OSX y en otros sistemas Linux modernos.
tony_sid

Realmente estoy tratando de editar un archivo cuyo nombre está almacenado en el portapapeles OSX. Al escribir pbpaste se mostrará el nombre del archivo. Estoy tratando de editar este archivo sin tener que escribirlo, pero usando lo que esté almacenado en el portapapeles. Linux no tiene pbpaste, pero es esencialmente lo mismo que obtener el resultado del nombre de archivo cat.
tony_sid

instalar xclipy luego usar xclip -opara acceder al portapapeles en el shell en x11. en caso de que los va a cambiar pbpaste...
Akira

Respuestas:


9

podrías probar esto:

% vi `cat file.txt`

o, para evitar el uso inútil de gato:

% vi `< file.txt`

le estás diciendo a vi (m) solo un montón de cosas arbitrarias. si desea que vi (m) haga algo como 'oye, abra ese archivo', debe alimentarlo con los mismos comandos que usaría en vi (m), por ejemplo. algo parecido :e foo.txt. pero eso es más complicado que hacer lo que propuse.


Esos no funcionaron.
tony_sid

44
esos son backticks, los escribiste correctamente? abren un subshell, ejecutan el 'gato' ... si eso no funciona, intente vi $(cat file.txt)
akira

Oh ok, funciona ahora. Gracias.
tony_sid

23

Al menos para vim (no estoy seguro acerca de vi), puedes hacer

cat file.txt | vim -

El '-' le dice a vim que lea desde stdin.


1
Lo siento, pero esta no es la respuesta correcta. Esto abre vim con el contenido 'archivo de texto'. El interlocutor quiere que vim abra el "archivo de texto". Voté a favor, pero lamentablemente no tengo suficiente reputación aquí.
scubbo

scubbo tiene razón! Mi respuesta es más útil para simplemente canalizar algo de stdin.
Jeff
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.