
Eu tenho um arquivo 'filelist' que contém as seguintes linhas:
text1.txt
text2.txt
text3.txt
Estou procurando uma invocação de linha de comando que abra os 3 arquivos no vim. Eu tentei o seguinte:
$ cat filelist | vim -
e
$ vim < cat filelist
mas esses não produzem o resultado desejado.
Responder1
Se os nomes dos arquivos não contiverem espaços ou outrosproblemáticopersonagens, você pode usar
vim $(cat filelist)
Para nomes de arquivos com espaços, usar xargs
é mais robusto (aqui usando xargs
opções específicas do GNU):
xargs --delimiter '\n' --arg-file=filelist vim --
Responder2
Com zsh
:
vim -- ${(f)"$(<filelist)"}
Com bash
4.0+:
readarray -r files < filelist &&
vim -- "${files[@]}"
Com qualquer shell do tipo Bourne (incluindo zsh
e bash
):
(IFS='
'; set -f; exec vim -- `cat filelist`)
Com GNU xargs
(também usando -r
para evitar a execução vim
se o arquivo estiver vazio, mas ao contrário das outras abordagens, não pulando as linhas vazias se houver):
xargs -rd '\n' -a filelist vim --
Responder3
Para abrir tudoindex.phpno caminho de trabalho atual
vim -p `find . -name index.php`
Responder4
Se você já está dentro do vim, você pode configurar :args
dentro do vim:
:args file-1 file-2 ... file-n
Bônus, no Unix você também pode fazer:
:args `find . -name Makefile`
(assumindo que os caminhos dos arquivos não contenham caracteres de nova linha e que haja pelo menos um arquivo correspondente)
Ou no seu caso:
:args `cat filelist`