Abrir archivos en vim con una lista de archivos que no funciona

Abrir archivos en vim con una lista de archivos que no funciona

Intenté abrir archivos con vim usando vim $(cat filelist)como se sugirió anteriormentepregunta.

Supongamos que tengo el siguiente archivo:

~/Workspace/bar/foo.cpp

La ejecución vim $(cat filelist)desde ~/Workspacese abre correctamente foo.cppcuando filelistcontiene bar/foo.cpp. Sin embargo, el comando no abre el archivo cuando filelistcontiene ~/Workspace/bar/foo.cpp. Quiero saber por qué el uso de la ruta absoluta hace que el comando falle.

Respuesta1

Esto se debe al orden en el que se realizan los diferentes tipos de expansiones en un shell. La bashpágina de manual dice:

La expansión se realiza en la línea de comando después de dividirla en palabras. Se realizan siete tipos de expansión: expansión de llaves, expansión de tilde, expansión de parámetros y variables, sustitución de comandos, expansión aritmética, división de palabras y expansión de nombres de rutas.

Reemplazando la ~expansión de tilde, mientras que su $(...)sustitución de comando. Ahora verá que después de realizar la sustitución del comando, no hay más sustitución de tilde. Con rutas absolutas reales (comenzando en la raíz del sistema de archivos /) funcionaría.

Pero puedes realizar la expansión tú mismo con sed:

vim $(sed "s_~_${HOME}_g" filelist)

información relacionada