将 *nix 命令的结果通过管道传输到 Vim 的打开文件集中

Bit*_*nu 2 unix vim grep ls

我有一个类似于此结构的文件夹:

nietzsche.txt
kant.org
buddha.txt
kierkegaard.org
aristotle.txt
plato.org
Run Code Online (Sandbox Code Playgroud)

我希望读取扩展名为 *.org 的文本文件,因此我使用以下命令:

ls | grep .org
Run Code Online (Sandbox Code Playgroud)

上面的命令巧妙地将以下内容发送到标准输入:

> kant.org
> kierkegaard.org
> plato.org
Run Code Online (Sandbox Code Playgroud)

我想在 vim 中一次性打开上面列出的文件 - 对于上面给出的示例,这是微不足道的;这只是意味着输入以“vim”为前缀的文件列表,例如:

vim kant.org kierkegaard.org plato.org
Run Code Online (Sandbox Code Playgroud)

...但在我的实际文章文件夹中,有数百个纯文本文件,扩展名为 *.org 和 *.txt。这不是将 org 文件转换为真正的纯文本的问题,而是试图让 vim 通过管道使用其他命令的输出。实际上,生成“待读书籍”列表的条件要复杂得多(即使用上次阅读日期、作者、写入日期等),因此简单的查找和替换 org-to-txt 是行不通的,因为我目前有一个 bash 脚本来生成列表并将其吐出到标准输出。

我如何让 vim 接受命令的输出,例如grep要立即打开的文件列表?

rom*_*inl 5

在这个具体的例子中,ls | grep .org这是没有意义的,因为你可以简单地这样做:

$ vim *.org
Run Code Online (Sandbox Code Playgroud)

对于一般情况,您将$ man xargs在类 Unix 系统上使用:

$ <command that generates a list of files> | xargs -o vim
Run Code Online (Sandbox Code Playgroud)

或者:

$ <command that generates a list of files> | xargs vim --not-a-term
Run Code Online (Sandbox Code Playgroud)

请注意,xargs-o和 Vim--not-a-term或多或少是相反的。前者确保 xargs 将正确的值传递tty给 Vim,而后者确保 Vim 在没有附加的情况下不会抱怨tty