我知道Vim的diff模式(vimdiff)允许我们比较两个(或多个)文件的内容。

但是可以跨目录比较多个文件的内容以便递归合并两个目录(例如DiffMerge和类似工具)?

评论

您的相应文件夹是否正在使用任何类型的VCS?这样可以打开一整套答案和插件,而这可能不适用于平面文件夹。

#1 楼

有DirDiff.vim插件(GitHub)可以递归地比较和合并两个目录。根据该窗口,您可以执行各种差异操作
,例如以Vim的差异模式打开两个文件,将文件或
目录递归复制到另一个文件,或从源中删除目录树目录。


用法:

:DirDiff <dir1> <dir2>


有关更多信息/帮助::help dirdiff

命令行:vim -c 'DirDiff foo bar'

查看屏幕截图:



另请参见:


(视频)DirDiff.vim,差异和两个目录之间的差异,由Yu-Jie Lin在YouTube上进行递归比较和合并?在dedm博客上





评论


dedm博客的链接已断开-博客已被删除。

– drevicko
18年3月29日在11:08

@drevicko谢谢,我已将链接替换为已存档的链接

– Kenorb
18年3月29日在20:50

好的插头谢谢

– javier_domenech
20年4月16日在17:03

#2 楼

我在python中使用包装器脚本来合并文件(请参见下文)。这是我用来合并我的~/.vim dirs等的简化版本。

它应该在Python 2和3中工作;但可能不是CentOS和其他发行版附带的Python的很旧版本中的。 />一样)不是很快(它会读取整个文件);您可以根据需要删除它们。

它也不会报告a是否仅出现在目录之一中...

#!/usr/bin/env python
from __future__ import print_function
import hashlib, os, subprocess, sys

if len(sys.argv) < 3:
    print('Usage: {} dir1 dir2'.format(sys.argv[0]))
    sys.exit(1)

dir1 = os.path.realpath(sys.argv[1])
dir2 = os.path.realpath(sys.argv[2])

for root, dirs, files in os.walk(dir1):
    for f in files:
        f1 = '{}/{}'.format(root, f)
        f2 = f1.replace(dir1, dir2, 1)

        # Don't diff files over 1MiB
        if os.stat(f1).st_size > 1048576 or os.stat(f2).st_size > 1048576: continue

        # Check if files are the same; in which case a diff is useless
        h1 = hashlib.sha256(open(f1, 'rb').read()).hexdigest()
        h2 = hashlib.sha256(open(f2, 'rb').read()).hexdigest()
        if h1 == h2: continue

        # Don't diff binary files
        if open(f1, 'rb').read().find(b'q4312078q0') >= 0: continue

        subprocess.call(['vimdiff', f1, f2])


#3 楼

我已经想要了一段时间。我发现最好的解决方案是使用vdwrap,它的效果非常好。它所做的只是将git difftool --dir-diff包装为vimdiff。它不需要任何vim插件。

您需要做的就是告诉git difftool使用vdwrap

git config --global difftool.vdwrap.cmd '/full/path/vdwrap $LOCAL $REMOTE'
git config --global diff.tool vdwrap


下次您下次使用git difftool,它将为每对文件打开带有单独Vim选项卡的Vim。要注意的是,它是Zsh脚本。将其转换为bash脚本应该很简单,但是我没有去尝试。

评论


相关:stackoverflow.com/questions/8156493/git-vimdiff-and-dirdiff

– Ciro Santilli郝海东冠状病六四事件法轮功
18-10-11在11:05

#4 楼

如果您只想使用vimdiff而不安装任何额外的东西,那么以下命令将连续打开所有不同的文件
,让您查看vimdiff的更改:

#5 楼

有一个轻量级的解决方案:


设置vimdiffext插件。
在shell上执行diff dir1 dir2 | vim -R -。更改文件的侧面比较。