vimdiff 比较输出而不是文件

vimdiff 比较输出而不是文件

我正在尝试比较两个命令输出(无文件)

vimdiff "$(tail /tmp/cachain.pem)" "$(tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem)"

我尝试使用重定向、管道,vim - -c但我一定错过了一些东西。有人可以帮忙吗?

答案1

$(…)对感到困惑<(…)。您使用了前者,它将输出传递为论点vimdiff。例如,如果最后一行/path/to/foocontains bar bar bar,则以下命令

echo $(tail -1 /path/to/foo)

相当于

echo bar bar bar

相反,您需要使用<(…).这就是所谓的流程替代,并将输出作为伪文件vimdiff命令。因此,请使用以下内容。

vimdiff <(tail /tmp/cachain.pem) <(tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem)

这适用于bashzsh,但显然有决不在 中进行流程替换tcsh

答案2

fish, 这psub命令执行进程替换,所以你的例子是:

vimdiff (tail /tmp/cachain.pem | psub) (tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem | psub)

顺便说一句,我认为编辑一个文件与该文件的特定 Git 版本相比是进程替换和vimdiff.定义(在fish语法中,但很容易适应 POSIX shell 语法)

function vimgitdiff
    vimdiff $argv[1] (git show $argv[2]:$argv[1] | psub)
end

然后打电话

vimgitdiff path/to/file branch-name

打开左侧工作树中的当前状态,右侧工作树中的当前Vim状态。path/to/filebranch-name

相关内容