Git - 排除{}的颜色词

时间:2011-12-13 00:52:21

标签: regex git

我正在使用带有--color-words的git来查看我的差异。在我的差异中,它表明我删除了

<b>{{ljcount}}</b>&nbsp;&nbsp;&nbsp;Changes

我补充道:

<b>{{skills_limits}}</b>&nbsp;&nbsp;&nbsp;Changes

这比我想要的要大(我希望单词边界位于{})。我尝试使用--word-diff-regex,但我找不到正则表达式来使它工作。我怎样才能达到这个结果?

3 个答案:

答案 0 :(得分:13)

来自git help diff

   --word-diff-regex=<regex>
       Use <regex> to decide what a word is, instead of considering runs of non-whitespace to be a word. Also implies
       --word-diff unless it was already enabled.

以下表达式将使一个单词成为任何字符串和下划线,或任何非空白字符。

$ git diff --color-words --word-diff-regex='\\w+|[^[:space:]]'

答案 1 :(得分:3)

由于您已使用orientation,因此无需单独提供--color-words,第一个选项接受正则表达式:

--word-diff-regex
     

相当于--color-words[=<regex>] 加上--word-diff=color   (如果指定了正则表达式)。

对我来说效果特别好的正则表达式是:

--word-diff-regex=<regex>

答案 2 :(得分:0)

如果您使用 --color-words[=<regex>],请确保使用 Git 2.32(2021 年第 2 季度)或更新版本:word-diff 模式已被教导可以与可以匹配空字符串的单词正则表达式更好地工作。< /p>

请参阅 commit 0324e8fPhillip Wood (phillipwood)(2021 年 5 月 4 日)。
(于 2021 年 5 月 14 日在 Junio C Hamano -- gitster --commit 65c1891 合并)

<块引用>

word diff:处理零长度匹配

签字人:Phillip Wood

<块引用>

如果 find_word_boundaries() 遇到零长度匹配(这可能是由于匹配换行符或在正则表达式中使用 '*' 而不是 '+' 引起的)我们停止拆分输入转化为产生不准确差异的词。
要在零长度匹配并尝试新匹配时修复此增量起点。
这是安全的,因为 posix 正则表达式总是返回最长的可用匹配,因此零长度匹配意味着从当前位置不再有可用匹配。

提交 bf82940(“color-words:启用 REG_NEWLINE 以帮助用户”,2009 年 1 月 17 日,Git v1.6.2-rc0 -- merge)阻止匹配否定字符类中的换行符,但用户仍然可能在正则表达式中有显式换行符匹配,这可能导致零长度匹配。

有人可能会争辩说,明确的换行匹配或使用“*”而不是“+”是用户错误,但解决这些问题似乎比产生不准确的差异要好。