我正在尝试为.natvis
文件设置一个hunk标头。出于某种原因,它似乎没有起作用。我正在按照here的说明进行操作,这在正则表达式的限制方面没有多说,例如,匹配的项目是否被认为是hunk标题还是我需要一个组?我试过两次都没有成功。这就是我所拥有的:
[diff "natvis"]
xfuncname = "^[\\\t ]*<Type[\\\t ]+Name=\"([^\"])\".*$"
我还添加到我的.gitattributes
文件中(即使我不肯定有必要):
*.natvis diff=natvis
我已尝试\t
而不是\\\t
,并且只用<Type.*
替换整个正则表达式而没有运气。我在git version 2.7.0.windows.1
上使用Windows 8.1
。 编辑:我在git version 2.11.1.windows.1
上升级为Windows 8.1
,甚至在git version 2.8.3
cygwin64
上尝试Windows 8.1
,结果相同。
作为测试文件,我有以下test.natvis
文件:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="test">
<Expand>
<Item Name="var">var</Item>
<!-- Non-blank line -->
<Item Name="added var">added_var</Item>
<Item Name="var2">var2</Item>
</Expand>
</Type>
</AutoVisualizer>
,<Item Name="added var">added_var</Item>
是添加的新行。
我真的不确定为什么这么难。
以下是我得到的示例输出:
$ git diff --word-diff
diff --git a/test.natvis b/test.natvis
index 73c06bc..bc0f549 100644
--- a/test.natvis
+++ b/test.natvis
@@ -18,6 +18,7 @@
<!-- Non-blank line -->
{+<Item Name="added var">added_var</Item>+}
<Item Name="var2">var2</Item>
warning: LF will be replaced by CRLF in test.natvis.
The file will have its original line endings in your working directory.
即使使用xfuncname = "^.*$"
,我也会期望<!-- Non-blank line -->
会显示为我的大头标题,但我什么都没得到。 :(
我尝试了torek提出的解决方案,但无济于事。它就像它不知道如何处理xfuncname
条目。 :(
答案 0 :(得分:2)
问题是由于我的混合环境。由于我直接在cygwin和windows下使用git,我有两个正在查看的主目录。 Cygwin和Windows。所以,我在Windows的Cygwin主目录中创建了一个指向.gitconfig
的链接。不幸的是,我忘记了也链接了我的.gitattributes
文件。
由于这个丢失的文件,它不会使用正确的差异xfuncname
。
现在已通过创建适当的链接解决了此问题。
答案 1 :(得分:1)
由于以下几个原因,这很困难:
你的正则表达式非常接近。这是适合我的一个:
[diff "natvis"]
xfuncname = "^[ \\t]*<Type Name=\"([^\"]*)\".*$"
主要变化:
我们可以使用POSIX [[:space:]]
代替[ \\t]
,最后的.*$
是多余的,因此可以转换为:
xfuncname = "^[[:space:]]*<Type[[:space:]][[:space:]]*Name=\"([^\"]*)\""
更冗长,但避免了棘手的\\t
编码。