【问题标题】:putting regex to make git diff split words at punctuation into .gitconfig file将正则表达式使 git diff 将标点符号处的单词拆分为 .gitconfig 文件
【发布时间】:2021-05-30 08:50:36
【问题描述】:

当前设置

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

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

让我写git wdiff 并得到逐字而不是逐行的diff 输出。我用它来用 LaTeX 写学术散文。

目标

此方法仅在空白处划分单词。我想在标点符号处进行划分,例如,last word of sentence. 更改为 last word of sentence.\footnote{New footnote.} 会产生如下所示的 diff 输出:

句子的最后一个单词。\footnote{新脚注。}

而不是当前的输出:

句子的最后一个单词。句子。\footnote{新脚注。}

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

尝试的解决方案

我发现this other question 以一个正则表达式开头,该正则表达式完全符合我在命令行中的要求,但我还没有弄清楚如何将它放入我的.gitconfig 文件而不产生错误消息fatal: bad config line 12 in file /Users/alex/.gitconfig。这是我在.gitconfig 文件中的内容:

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

问题似乎是分号。

.gitconfig 中处理类似问题的different question 建议在整个别名周围加上双引号。但是当我这样做时,我会收到相同的错误消息。我认为这是因为正则表达式还包含双引号。

问题

如何将正则表达式放入我的.gitconfig 文件中以便正确解析?

【问题讨论】:

    标签: regex git diff git-diff git-config


    【解决方案1】:

    在找到this page of documentation 之前,我也很困惑。您感兴趣的部分是:

    定义值的行可以通过以\ 结束来继续到下一行;反斜杠和行尾被剥离。 name = 之后的前导空格、第一个注释字符#; 之后的行的其余部分以及行的尾随空格将被丢弃,除非它们用双引号引起来。值中的内部空格将被逐字保留。

    在双引号内,双引号 " 和反斜杠 \ 字符必须进行转义:对于 " 使用 \",对于 \ 使用 \\

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多