git diff
有与单词匹配的选项 --word-diff-regex=<...>
。某些语言有特殊的默认值(如man 5 gitattributes
中所述)。但这些是什么?文档中没有描述,我查找了git
的来源,也没有找到它们。
有什么想法吗?
编辑:我在
git 1.9.1
,但我会接受任何版本的答案。
userdiff.c
文件中的默认单词正则表达式。 PATTERNS
和 IPATTERN
宏将基本单词正则表达式作为其第三个参数,并添加 "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+"
以确保不属于较大单词的所有非空白字符本身被视为单词,并且假设UTF-8,不分割多字节字符。例如,在:
PATTERNS("tex", "^(\\\\((sub)*section|chapter|part)\\*{0,1}\\{.*)$", "\\\\[a-zA-Z@]+|\\\\.|[a-zA-Z0-9\x80-\xff]+"),
正则表达式这个词是
"\\\\[a-zA-Z@]+|\\\\.|[a-zA-Z0-9\x80-\xff]+|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+"
。
在这种情况下,
|[\xc0-\xff][\x80-\xbf]+
恰好没有任何好处,因为[\xc0-\xff][\x80-\xbf]+
所涵盖的所有内容都已被[a-zA-Z0-9\x80-\xff]+
所涵盖,但它也不会造成任何伤害。
您仍然需要通过 .gitattributes 使用属性机制启用此功能
因此,要激活 hvd 对所有
tex
文件的答案中显示的 *.tex
模式,您可以在项目根目录中发出以下命令(在 Windows 下省略引号):
echo '*.tex diff=tex' >> .gitattributes
注意:关于这些模式,Git 2.34(2021 年第 4 季度)更加清晰,并提醒开发人员,
userdiff
模式应保持简单且宽松,假设它们应用的内容始终在语法上正确。
请参阅Junio C Hamano (gitster
)
提交 b6029b3(2021 年 8 月 10 日)。
gitster
--合并于 commit e1eb133,2021 年 8 月 30 日)
userdiff
:对内置模式的评论
提醒开发人员,他们不需要过度实现模式来为无效构造做好准备。所以这些内置模式现在有评论:它们只需足够宽松,假设有效负载在语法上是正确的,这可能会让它们变得更简单。
大部分文字来自 Johannes Sixt,并由 Johannes Sixt 进一步改进。
/*
* Built-in drivers for various languages, sorted by their names
* (except that the "default" is left at the end).
*
* When writing or updating patterns, assume that the contents these
* patterns are applied to are syntactically correct. The patterns
* can be simple without implementing all syntactical corner cases, as
* long as they are sufficiently permissive.
*/
static struct userdiff_driver builtin_drivers[] = {