将正则表达式放入.gitconfig文件以使git diff在标点符号处分割单词

3

当前设置

我的.gitconfig目前包含这个别名:

[alias]
    wdiff = diff --color-words --histogram

我希望能够使用git wdiff命令,获取单词级别的差异输出,而不是行级别的diff。我将其用于在LaTeX中撰写学术论文。

目标

该方法仅在空格处分隔单词。 我希望在标点符号处分隔单词,以便例如将last word of sentence.更改为last word of sentence.\footnote{New footnote.}会产生类似于以下内容的diff输出:

last word of sentence.\footnote{New footnote.}

而非当前的输出:

last word of sentence.sentence.\footnote{New footnote.}

(其中斜体表示删除,粗体表示添加)。

尝试解决方案

我在这个问题中找到了一个正则表达式,可以在命令行中完全做到我想要的效果,但我还没有弄清楚如何将其放入我的.gitconfig文件中,否则就会出现错误信息fatal: bad config line 12 in file /Users/alex/.gitconfig。 这是我放在.gitconfig文件中的内容:

[alias]
    wdiff = diff --color-words='[^][<>()\{},.;:?/|\\=+*&^%$#@!~`"'\''[:space:]]+|[][<>(){},.;:?/|\\=+*&^%$#@!~`"'\'']' --histogram

问题似乎出在分号上。
一个与之类似的问题(链接),建议将整个别名用双引号括起来。但是当我在我的情况下这样做时,我收到了相同的错误消息。我认为这是因为正则表达式也包含双引号。
问题:
如何将正则表达式放入我的.gitconfig文件中,以便可以正确解析?
1个回答

2

在我找到这篇文档页面之前,我也感到困惑。你感兴趣的部分是:

通过以 \ 结尾,定义值的行可以延续到下一行;反斜杠和行末的换行符将被删除。在 name = 后的前导空格、第一个注释字符 #; 之后的行剩余部分以及行尾的空格(除非它们被双引号包含)都将被舍弃。值内部的空格保留原样。

在双引号内,必须转义双引号 " 和反斜杠 \ 字符:使用 \" 表示 ",使用 \\ 表示 \

以下转义序列(除了 \"\\)得到识别:用于换行字符(NL)的 \n,用于水平制表符(HT,TAB)的 \t 和用于退格(BS)的 \b。其他字符转义序列(包括八进制转义序列)无效。

所以,在.git/config中,正确的别名是:

wdiff = "diff --color-words='[^][<>()\\{},.;:?/|\\\\=+*&^%$#@!~`\"'\\''[:space:]]+|[][<>(){},.;:?/|\\\\=+*&^%$#@!~`\"'\\'']' --histogram"

在这种情况下,您只需要用双引号括起所有内容,并转义"和反斜杠。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接