Abra vários arquivos no Vim com uma lista de arquivos

Abra vários arquivos no Vim com uma lista de arquivos

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 xargsopções específicas do GNU):

xargs --delimiter '\n' --arg-file=filelist vim --

Responder2

Com zsh:

vim -- ${(f)"$(<filelist)"}

Com bash4.0+:

readarray -r files < filelist &&
  vim -- "${files[@]}"

Com qualquer shell do tipo Bourne (incluindo zshe bash):

(IFS='
'; set -f; exec vim -- `cat filelist`)

Com GNU xargs(também usando -rpara evitar a execução vimse 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 :argsdentro 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`

informação relacionada