我正在尝试打开文件a.lst
中列出的所有文件:
symptom1.log
symptom2.log
symptom3.log
symptom4.log
但是尝试以下命令:
cat a.lst | tr "\n" " " | vim -
仅打开stdin输出
symptom1.log symptom2.log symptom3.log symptom4.log
它不会在vim中打开symptom1.log, symptom2.log, symptom3.log & symptom4.log
。
如何使用vim打开a.lst中列出的所有文件?
答案 0 :(得分:6)
您可以使用xargs将参数设置为vi:
vim $(cat 1.t | xargs)
或
cat a.lst | xargs vim
如果要在拆分视图中打开它们,请使用-o(水平)或-O(垂直):
cat a.lst | xargs vim -o
cat a.lst | xargs vim -O
答案 1 :(得分:2)
while read f ; do cat $f ; done < a.lst | vim -
答案 2 :(得分:2)
我喜欢Qiau的xargs选项的变体:
xargs vim < a.lst
这是有效的,因为输入重定向应用于xargs
命令而不是vim
。
如果你的shell是bash,另一种选择是:
vim $(<a.lst)
这是有效的,因为在$(...)
内,没有命令的输入重定向只是打印输入的结果,因此将文件扩展为文件列表以供vim打开。
<强>更新强>:
您在评论中提到您使用csh
作为shell。所以你的另一个选择可能是:
vim `cat a.lst`
这也适用于POSIX shell,但是我应该指出,在其他一些shell(特别是bash)中不推荐使用反引号来支持$(...)
替代。
请注意,重定向可能发生在命令行的多个位置。这也适用于csh和bash:
< a.lst xargs vim
vim可能会抱怨其输入不是来自终端,但无论如何它似乎对我有用。