如何在ace编辑器中获取和修补差异?

时间:2014-08-01 15:05:08

标签: diff ace-editor

我听说Ace提供了获取和修补差异的功能,但是我搜索了Ace的文档,尝试使用谷歌搜索,但无法找到如何做到这一点。

Ace是否提供了创建和修补正在编辑的文档的差异的功能?

根据我的研究,我认为这样做的方法是使用google-diff-match-patch库(https://code.google.com/p/google-diff-match-patch/)。但是我更喜欢使用Ace的内置机制,如果有的话。

3 个答案:

答案 0 :(得分:3)

我们正在为我们正在开发的项目准确地选择这个选项,所以我为它创建了一个lib:http://ace-diff.github.io/ace-diff/ - 它建立在google-diff-match-patch之上,就像“用户”所说的那样,同样。

该网站包含一些演示,代码+ doc在github上。希望这有帮助!

答案 1 :(得分:1)

没有Ace没有提供修补差异的功能。你需要使用diff-match-patch,

例如,diff to values将patch应用于ace文档使用

var Range = require("ace/range").Range;
var dmplib = require("diff_match_patch");

var dmp = new dmplib.diff_match_patch();
var diff = dmp.diff_main(oldValue, newValue, true);


var offset = 0;
diff.forEach(function(chunk) {
    var op = chunk[0];
    var text = chunk[1];

    if (op === 0) {
        offset += text.length;
    } else if (op === -1) {
        doc.remove(Range.fromPoints(
            doc.indexToPosition(offset),
            doc.indexToPosition(offset + text.length)
        ));
    } else if (op === 1) {
        doc.insert(doc.indexToPosition(offset), text);
        offset += text.length;
    }
});

答案 2 :(得分:0)

我今天需要将差异的捕获和合并添加到一个项目中。完整的分屏库对于我的需求来说太过分了。

以下内容基于上面的a_user代码,但以简洁的语法编写:

plt.quiver(x,y,u,v,scale=10)