Come usare una pipe per modificare un file con vi


15

Diciamo che ho un file chiamato file.txt. In esso è un nome di un file che voglio modificare con vi. Voglio fare qualcosa del genere in modo da poter modificare il file:

cat file.txt | vi

Tuttavia, ciò non funziona. Come si può fare?

Per chiarire le cose:

Ecco i contenuti di file.txt:

textfile

Quindi voglio in qualche modo inviare il contenuto di file.txt a vi in ​​modo che accada la stessa cosa di quando si digita vi textfile.

Il contenuto di file.txt può cambiare. Voglio che vi modifichi qualunque file sia elencato in file.txt.


Non penso che vi = vim. Non so che questo faccia la differenza per questa domanda, ma il tuo tag è fuorviante.
soandos

Penso che potrebbe esserci di più nella tua domanda che stai cercando di porre. L'apertura di un file con nome arbitrario è l'utilizzo base di vi. Per esempio: vi file.txt. C'è qualcosa di più avanzato che stai cercando di fare?
camster342

vi avvia vim su OSX e su altri moderni sistemi Linux.
tony_sid

In realtà sto cercando di modificare un file il cui nome è memorizzato negli Appunti OSX. Digitando pbpaste verrà visualizzato il nome file. Sto cercando di modificare questo file senza doverlo digitare, ma usando tutto ciò che è memorizzato negli Appunti. Linux non ha pbpaste, ma è essenzialmente lo stesso di ottenere l'output dal nome file cat.
tony_sid

installare xclipe quindi utilizzare xclip -oper accedere agli Appunti sulla shell in x11. nel caso in cui sia necessario sostituire pbpaste...
Akira,

Risposte:


9

potresti provare questo:

% vi `cat file.txt`

oppure, per evitare l'uso usuale del gatto:

% vi `< file.txt`

stai dicendo a vi (m) solo un mucchio di cose arbitrarie. se vuoi che vi (m) faccia qualcosa come 'hey, apri quel file' devi dargli gli stessi comandi che useresti in vi (m), ad es. qualcosa del genere :e foo.txt. ma è solo più complicato che fare ciò che ho proposto.


Quelli non hanno funzionato.
tony_sid

4
quelli sono backtick, li hai digitati correttamente? aprono una subshell, eseguono il 'gatto' ... se non funziona, prova vi $(cat file.txt)
Akira

Oh ok, ora funziona. grazie.
tony_sid

23

Almeno per vim (non sono sicuro di vi), puoi farlo

cat file.txt | vim -

Il '-' dice a Vim di leggere dallo stdin.


1
Siamo spiacenti, ma questa non è la risposta corretta. Questo apre vim con il contenuto 'textfile'. L'interrogante vuole che vim apra 'file di testo' stesso. Sottovaluterei, ma purtroppo non ho abbastanza reputazione qui.
Scubbo,

scubbo ha ragione! La mia risposta è più utile solo per il piping di qualcosa da stdin.
Jeff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.