
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 xargs
es más sólido (aquí se usan xargs
opciones específicas de GNU):
xargs --delimiter '\n' --arg-file=filelist vim --
Respuesta2
Con zsh
:
vim -- ${(f)"$(<filelist)"}
Con bash
4.0+:
readarray -r files < filelist &&
vim -- "${files[@]}"
Con cualquier shell tipo Bourne (incluidos zsh
y bash
):
(IFS='
'; set -f; exec vim -- `cat filelist`)
Con GNU xargs
(también se usa -r
para evitar ejecutar vim
si 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 :args
desde 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`