【问题标题】:ignore differences in syntax in beyondcompare忽略超出比较中的语法差异
【发布时间】:2012-08-15 13:57:36
【问题描述】:

在一个代码分支中,我已将所有代码从 obj.varname 更改为 obj("varname"),当我比较代码时,我想忽略这些差异,因为 varname 是相同的。

我有一个我认为需要的正则表达式,但遗憾的是无法使用 Scooter 的 Beyond Compare 忽略比较

^obj\("\w*"\)|obj\.\w*$

我正在关注这个教程http://www.scootersoftware.com/support.php?zz=kb_unimportantv3

所以我的问题是:这甚至可能无法比拟吗?如果是,请分享解决方案,包括说明或发布您的屏幕截图。

【问题讨论】:

    标签: version-control compare beyondcompare


    【解决方案1】:

    Beyond Compare 3 的专业版通过其文本替换功能支持这一点。如果您已经购买了标准版许可证,则需要恢复到试用模式才能对其进行测试:http://www.scootersoftware.com/suppo...?zz=kb_evalpro

    1. 在文本比较中加载您的两个文件。
    2. 会话菜单打开会话设置对话框,然后在替换选项卡上单击新建以创建一个新的替代品。
    3. 要查找的文本编辑中,使用(\w+)\.(\w+)
    4. 替换为编辑中,使用$1("$2")
    5. 选中正则表达式复选框。

    替代方法是将obj.varnameobj("varname") 的任何实例标记为不重要。基本步骤如下:

    1. 在文本比较中加载您的两个文件。
    2. 会话菜单打开会话设置对话框,然后在重要性选项卡上单击编辑语法... 按钮。
    3. 在下一个对话框中,单击顶部列表框下方的新建...按钮。
    4. 元素名称 字段更改为有用的名称(例如“PropertyAccess”)。
    5. Category* 更改为 List
    6. Text in list*编辑中,添加这两行:

      obj.varname
      obj("varname")

    7. 单击确定关闭语法项对话框,然后再次单击确定关闭文本格式 em>* 语法项。

    8. 会话设置对话框的语法元素列表框中取消选中“PropertyAccess”(或您命名的任何名称),然后单击确定关闭它。

    这种方法不够灵活或干净。在上述步骤中,您将匹配特定的硬编码对象和变量名称,因此 obj.varname 并不重要,但 obj.othervar 不重要,即使它与 obj("othervar") 对齐。如果两边的文字都不重要,那么差异将不重要;如果一侧很重要,那将是一个重要的区别。因此,通过上述步骤,obj.varnameobj("varname") 将在任何地方都不重要,但它会正常工作,因为它们要么匹配到也匹配这些定义(因此不重要)的其他情况,要么将匹配到某些东西否则与该定义不匹配,这将很重要,并且会使差异变得重要。

    您可以使用正则表达式来匹配更一般的文本类别,但您可能不想这样做。例如,如果您想匹配遵循该模式的所有文本,您可以改用这两行:

    \w+\.\w+
    \w+\("\w+"\)
    

    然后选中语法项对话框中的正则表达式复选框,以便它们以这种方式匹配。

    这样做的好处/坏处是,与这些模式匹配的 任何 文本都不重要。 abc.newvardef.varname 将被认为是不重要的区别,因为双方都匹配不重要的定义。这对于 cmets 或空白更改之类的事情很有用,但可能不是您想要在这里做的。

    【讨论】:

    • 这太棒了!第一个解决方案就像一个魅力,我发现了一个我从来不知道的功能,但是第二个仍然没有。如果您不介意发布所有定义为重要或不重要的语法,那么我可以重复。
    • @kiev 我已经用第二种方法的更多细节更新了答案。
    猜你喜欢
    • 2015-10-02
    • 2013-11-05
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2017-04-06
    • 2022-10-17
    相关资源
    最近更新 更多