将 *nix 命令的结果通过管道传输到 Vim 的打开文件集中
Piping the results of *nix commands into Vim's set of open files
我有一个类似这种结构的文件夹:
nietzsche.txt
kant.org
buddha.txt
kierkegaard.org
aristotle.txt
plato.org
我想阅读扩展名为 *.org 的文本文件,所以我使用命令:
ls | grep .org
以上命令巧妙地将以下内容发送到标准输入:
> kant.org
> kierkegaard.org
> plato.org
我想一次打开上面在 vim 中列出的所有文件 - 对于上面给出的示例,这是微不足道的;它只是意味着输入前缀为“vim”的文件列表,例如:
vim kant.org kierkegaard.org plato.org
...但在我实际的文章文件夹中有数百个纯文本文件,扩展名为 *.org 和 *.txt。这不是将 org 文件转换为纯文本的问题,而是试图让 vim 通过管道使用其他命令的输出。实际上,生成“待读书籍”列表的条件要复杂得多(即使用上次阅读日期、作者、写作日期等),因此简单地查找和替换 org-to-txt 是行不通的,因为我目前有一个 bash 脚本来生成列表并将其输出到标准输出。
如何让 vim 接受像 grep
这样的命令的输出作为要立即打开的文件列表?
在此具体示例中,ls | grep .org
毫无意义,因为您可以简单地执行以下操作:
$ vim *.org
至于一般情况,您会在类 Unix 系统上使用 $ man xargs
:
$ <command that generates a list of files> | xargs -o vim
或:
$ <command that generates a list of files> | xargs vim --not-a-term
请注意,xargs 的 -o
和 Vim 的 --not-a-term
或多或少是相反的。前者确保 xargs 将适当的 tty
传递给 Vim,而后者确保 Vim 在没有附加的 tty
.
时不会抱怨
你可以在vim:
里面使用命令模式补全
:e *.org<C-a>
阅读更多关于:h c_CTRL-A
我有一个类似这种结构的文件夹:
nietzsche.txt
kant.org
buddha.txt
kierkegaard.org
aristotle.txt
plato.org
我想阅读扩展名为 *.org 的文本文件,所以我使用命令:
ls | grep .org
以上命令巧妙地将以下内容发送到标准输入:
> kant.org
> kierkegaard.org
> plato.org
我想一次打开上面在 vim 中列出的所有文件 - 对于上面给出的示例,这是微不足道的;它只是意味着输入前缀为“vim”的文件列表,例如:
vim kant.org kierkegaard.org plato.org
...但在我实际的文章文件夹中有数百个纯文本文件,扩展名为 *.org 和 *.txt。这不是将 org 文件转换为纯文本的问题,而是试图让 vim 通过管道使用其他命令的输出。实际上,生成“待读书籍”列表的条件要复杂得多(即使用上次阅读日期、作者、写作日期等),因此简单地查找和替换 org-to-txt 是行不通的,因为我目前有一个 bash 脚本来生成列表并将其输出到标准输出。
如何让 vim 接受像 grep
这样的命令的输出作为要立即打开的文件列表?
在此具体示例中,ls | grep .org
毫无意义,因为您可以简单地执行以下操作:
$ vim *.org
至于一般情况,您会在类 Unix 系统上使用 $ man xargs
:
$ <command that generates a list of files> | xargs -o vim
或:
$ <command that generates a list of files> | xargs vim --not-a-term
请注意,xargs 的 -o
和 Vim 的 --not-a-term
或多或少是相反的。前者确保 xargs 将适当的 tty
传递给 Vim,而后者确保 Vim 在没有附加的 tty
.
你可以在vim:
里面使用命令模式补全:e *.org<C-a>
阅读更多关于:h c_CTRL-A