25

我想知道是否有办法直接在 vim 中查看任何命令的输出,而不是先将其重定向到文件中然后打开该文件。

例如,我需要类似 $ gvim <diff -r dir1/ dir2/

这给出了模棱两可的重定向错误消息

我只想直接在 gvim 中查看 dir1 和 dir2 之间的差异。

任何人都可以提供一个不错的技巧吗?

4

10 回答 10

42
diff file1 file2 | vim -R -

-R使它成为只读的,因此您不会意外修改输入(这可能是您想要的行为,也可能不是您想要的行为)。单个破折号告诉vim通过标准输入读取其输入。也适用于其他命令。

于 2008-10-23T17:57:24.213 回答
10

此外,当已经在 Vim 中时:

:r! diff file1 file2
于 2008-10-23T18:45:55.427 回答
6

vim -d file1 file2

于 2008-10-23T18:12:55.837 回答
6

尽管我也建议vimdiffvim -d查看差异的情况,但我只需要分享这种(更通用的)在管道中使用 vim 的方法:vipe(来自moreutilsUbuntu 中的包)。

例如:

查找 -name '*.png' | 毒蛇 | xargs rm

将允许您首先编辑(在 vim 中)找到的 .png 文件列表,然后再将其传递给xargs rm.

于 2008-10-23T19:30:19.050 回答
4

jst 使用 gvimdiff
或 vimdiff
将命令的输出直接粘贴到 vim 中,例如 ls,尝试
:%r!ls

于 2008-10-23T17:53:57.013 回答
4

顺便说一句,有一个DirDiff 插件

于 2008-10-23T22:22:21.950 回答
2

你可以这样做

diff -r dir1/ dir2/ | gvim -

vim(或 gvim)的 ' -' 选项告诉 vim 打开 STDIN

于 2009-06-02T20:09:33.950 回答
1

我经常用vimdiff -g <file1> <file2>

于 2011-08-20T15:54:29.283 回答
0

您正在寻找的是所谓的过程替换

vim <(diff -r dir1/ dir2/)

但是 Luc 提到的 DirDiff 插件对于比较目录更有用。

于 2014-09-02T21:15:37.353 回答
0

最简单方便的方法之一是这样做:

vimdiff -R <file1> <file2>

'-R' 标志再次将其打开为只读模式以避免任何意外更改。

于 2012-12-20T10:57:06.590 回答