
次の行を含むファイル「filelist」があります。
text1.txt
text2.txt
text3.txt
vim で 3 つのファイルを開くコマンド ライン呼び出しを探しています。以下を試しました:
$ cat filelist | vim -
そして
$ vim < cat filelist
しかし、それらは望ましい結果をもたらさない。
答え1
ファイル名にスペースやその他の問題がある文字は、
vim $(cat filelist)
スペースを含むファイル名の場合、 を使用するとxargs
より堅牢になります (ここでは GNUxargs
固有のオプションを使用します)。
xargs --delimiter '\n' --arg-file=filelist vim --
答え2
とzsh
:
vim -- ${(f)"$(<filelist)"}
4.0以降の場合bash
:
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
すべてを開くにはインデックス現在の作業パス
vim -p `find . -name index.php`
答え4
すでに vim 内にいる場合は、:args
vim 内から設定できます。
:args file-1 file-2 ... file-n
ボーナスとして、Unix では次の操作も実行できます。
:args `find . -name Makefile`
(ファイル パスに改行文字が含まれておらず、一致するファイルが少なくとも 1 つあると仮定)
あるいはあなたの場合:
:args `cat filelist`