Sto cercando di aprire tutti i file elencati nel file a.lst
:
symptom1.log
symptom2.log
symptom3.log
symptom4.log
Ma provando il seguente comando:
cat a.lst | tr "n" " " | vim -
apre solo l'output stdin
symptom1.log symptom2.log symptom3.log symptom4.log
Non si apre symptom1.log, symptom2.log, symptom3.log & symptom4.log
in vim.
Come aprire tutti i file elencati in a.lst usando vim?
risposte:
6 per risposta № 1Puoi usare xargs per allineare gli argomenti a vi:
vim $(cat 1.t | xargs)
o
cat a.lst | xargs vim
Se vuoi che siano aperti in vista divisa, usa -o (orizzontale) o -O (verticale):
cat a.lst | xargs vim -o
cat a.lst | xargs vim -O
2 per risposta № 2
while read f ; do cat $f ; done < a.lst | vim -
2 per risposta № 3
Mi piace una variante dell'opzione xargs di Qiau:
xargs vim < a.lst
Questo funziona perché il reindirizzamento di input viene applicato a xargs
comando anziché vim
.
Se la tua shell è bash, un'altra opzione è questa:
vim $(<a.lst)
Questo funziona perché all'interno di $(...)
, il reindirizzamento dell'input senza un comando stampa semplicemente i risultati dell'input, espandendo quindi il file in un elenco di file per consentire l'apertura di vim.
AGGIORNARE:
Hai citato nei commenti che stai utilizzando csh
come il tuo guscio. Quindi un'altra opzione per te potrebbe essere:
vim `cat a.lst`
Questo dovrebbe funzionare anche nelle shell POSIX, ma devo sottolineare che i backquotes sono deprecati in alcune altre shell (in particolare bash) a favore del $(...)
alternativa.
Si noti che il reindirizzamento può avvenire in più punti della riga di comando. Questo dovrebbe funzionare anche in csh e bash:
< a.lst xargs vim
vim potrebbe lamentarsi del fatto che il suo input non proviene da un terminale, ma sembra funzionare comunque per me.