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.

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

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

Jeff
fuente
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