
У меня есть файл «filelist», содержащий следующие строки:
text1.txt
text2.txt
text3.txt
Я ищу вызов командной строки, который открывает 3 файла в vim. Я попробовал следующее:
$ cat filelist | vim -
и
$ vim < cat filelist
но они не дают желаемого результата.
решение1
Если имена файлов не содержат пробелов или другихпроблематичныйсимволы, вы можете использовать
vim $(cat filelist)
Для имен файлов с пробелами xargs
более надежным является использование (здесь используются xargs
специальные параметры GNU):
xargs --delimiter '\n' --arg-file=filelist vim --
решение2
С zsh
:
vim -- ${(f)"$(<filelist)"}
С bash
4.0+:
readarray -r files < filelist &&
vim -- "${files[@]}"
С любой оболочкой типа Bourne (включая zsh
и bash
):
(IFS='
'; set -f; exec vim -- `cat filelist`)
С помощью GNU xargs
(также используется -r
для избежания запуска vim
, если файл пуст, но в отличие от других подходов, не пропускает пустые строки, если таковые имеются):
xargs -rd '\n' -a filelist vim --
решение3
Чтобы открыть всеиндекс.phpв текущем рабочем пути
vim -p `find . -name index.php`
решение4
Если вы уже находитесь в vim, вы можете установить :args
из vim:
:args file-1 file-2 ... file-n
Бонус: в Unix вы также можете сделать:
:args `find . -name Makefile`
(предполагается, что пути к файлам не содержат символов новой строки и что есть хотя бы один соответствующий файл)
Или в вашем случае:
:args `cat filelist`