Открытие файлов в vim со списком файлов не работает

Открытие файлов в vim со списком файлов не работает

Я попробовал открыть файлы с помощью vim, vim $(cat filelist)как было предложено ранеевопрос.

Предположим, у меня есть следующий файл:

~/Workspace/bar/foo.cpp

Выполнение vim $(cat filelist)из ~/Workspaceправильно открывает, foo.cppкогда filelistсодержит bar/foo.cpp. Однако команда не открывает файл, когда filelistсодержит ~/Workspace/bar/foo.cpp. Я хочу знать, почему использование абсолютного пути приводит к сбою команды.

решение1

Это связано с порядком, в котором различные типы расширений выполняются в оболочке. На bashстранице руководства говорится:

Расширение выполняется в командной строке после ее разделения на слова. Существует семь видов выполняемого расширения: расширение фигурных скобок, расширение тильды, расширение параметров и переменных, подстановка команд, арифметическое расширение, разделение слов и расширение имени пути.

Замена ~расширения тильды is, в то время как ваша $(...)подстановка команды is. Теперь вы видите, что после выполнения подстановки команды больше нет подстановки тильды. С реальными абсолютными путями (начиная с корня файловой системы /) это сработает.

Но вы можете выполнить расширение самостоятельно с помощью sed:

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

Связанный контент