/ / Linux comando di output cat con nuove righe da leggere usando vim - linux, vim, cat, file multipli

Output di comando cat di Linux con nuove righe da leggere usando vim-linux, vim, cat, file multipli

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 № 1

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