Linux cat 命令输出,其中包含要使用 vim 读取的新行

Linux cat command output with new lines to be read using vim

我正在尝试打开文件 a.lst:

中列出的所有文件
symptom1.log
symptom2.log
symptom3.log
symptom4.log

但尝试以下命令:

cat a.lst | tr "\n" " " | vim -

只打开标准输入输出

symptom1.log symptom2.log symptom3.log symptom4.log

在 vim 中没有打开 symptom1.log, symptom2.log, symptom3.log & symptom4.log

如何使用vim打开a.lst中列出的所有文件?

您可以使用 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

while read f ; do cat $f ; done < a.lst | vim -

我喜欢 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 可能会抱怨它的输入不是来自终端,但它似乎对我有用。