Linux cat命令输出,使用vim读取新行

时间:2015-09-02 06:11:41

标签: linux vim cat multiple-files

我正在尝试打开文件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中列出的所有文件?

3 个答案:

答案 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可能会抱怨其输入不是来自终端,但无论如何它似乎对我有用。