Abrindo arquivos no vim com uma lista de arquivos não funcionando

Abrindo arquivos no vim com uma lista de arquivos não funcionando

Eu tentei abrir arquivos com o vim usando vim $(cat filelist)como sugerido anteriormentepergunta.

Suponha que eu tenha o seguinte arquivo:

~/Workspace/bar/foo.cpp

A execução vim $(cat filelist)correta ~/Workspaceabre foo.cppquando filelistcontém bar/foo.cpp. No entanto, o comando não abre o arquivo quando filelistcontém ~/Workspace/bar/foo.cpp. Quero saber por que usar o caminho absoluto faz com que o comando falhe.

Responder1

Isto se deve à ordem em que os diferentes tipos de expansões são realizadas em um shell. A bashpágina de manual diz:

A expansão é executada na linha de comando após ser dividida em palavras. Existem sete tipos de expansão realizados: expansão de chaves, expansão de til, expansão de parâmetros e variáveis, substituição de comando, expansão aritmética, divisão de palavras e expansão de nome de caminho.

Substituindo a ~expansão is til, enquanto a sua $(...)é substituição de comando. Agora você vê que após a substituição do comando ser executada, não há mais substituição de til. Com caminhos absolutos reais (começando no sistema de arquivos root /) funcionaria.

Mas você pode realizar a expansão sozinho com sed:

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

informação relacionada