Abra varios archivos en Vim con una lista de archivos

Abra varios archivos en Vim con una lista de archivos

Tengo un archivo 'filelist' que contiene las siguientes líneas:

text1.txt
text2.txt
text3.txt 

Estoy buscando una invocación de línea de comando que abra los 3 archivos en vim. Intenté lo siguiente:

$ cat filelist | vim - 

y

$ vim < cat filelist

pero esos no dan el resultado deseado.

Respuesta1

Si los nombres de los archivos no contienen espacios u otrosproblemáticopersonajes que puedes usar

vim $(cat filelist)

Para nombres de archivos con espacios, el uso xargses más sólido (aquí se usan xargsopciones específicas de GNU):

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

Respuesta2

Con zsh:

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

Con bash4.0+:

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

Con cualquier shell tipo Bourne (incluidos zshy bash):

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

Con GNU xargs(también se usa -rpara evitar ejecutar vimsi el archivo está vacío, pero al contrario de los otros enfoques, no omitir las líneas vacías si las hay):

xargs -rd '\n' -a filelist vim --

Respuesta3

para abrir todoindex.phpen el camino de trabajo actual

vim -p `find . -name index.php`

Respuesta4

Si ya estás dentro de vim, puedes configurar :argsdesde dentro de vim:

:args file-1 file-2 ... file-n

Además, en Unix también puedes hacer:

:args `find . -name Makefile`

(suponiendo que las rutas de los archivos no contengan caracteres de nueva línea y que haya al menos un archivo coincidente)

O en tu caso:

:args `cat filelist`

información relacionada