解释和/或比较Git Grep颜色选项

时间:2016-08-04 21:14:28

标签: git colors config git-config git-grep

我试图为我的Git定制颜色。

在阅读documentation后,我找到了我想要设置的选项。

除了Grep,一切都很好。 我已经意识到,我过去并没有真正使用它。

我想用相同的调色板为它设置颜色,但我无法测试其中的一些......

我不知道matchContextmatch指的是什么,以及它们与matchSelectedselected的区别。

matchSelected为我搜索的实际文字设置颜色,而selected则为该匹配的行级(?)上下文

那么,match在做什么? matchContext设置了什么?对于这些,地狱是一个好的,详细的描述?

任何?

1 个答案:

答案 0 :(得分:3)

以下是链接文档所说的内容,稍微修整一下以使其更好地工作:

  

context

     

上下文行中的不匹配文字(使用-A-B-C时)

     

matchContext

     

匹配上下文行中的文字

     

matchSelected

     

匹配选定行中的文字

     

selected

     

所选行中不匹配的文字

(我已经遗漏了match;我们会暂时把它放回去)。假设我们运行git grep findme,我们就有一个搜索词。

这三个技术术语如下:

  • 匹配文字:这应该是非常明显的。我们正在搜索文字字符串findme,因此这是该字符串的每次出现。对这些类型的固定字符串进行颜色编码并不像模式那样:如果我们正在搜索模式,那么查看模式匹配的内容可能特别有用。

  • 上下文行:这里的线索是提到三个标志。您可以获取“之前”上下文(-B),“之后”(-A)或两者(-C),这基本上意味着如果您正在搜索{{1}并且Git发现,它不仅会打印出单词findme的行,而且会打印出该行之前和之后的一些行。

    请注意,这些之前和/或之后的行可能其中包含findme - 但他们可能会这样做!

  • 选择的行:Git隐藏了这意味着什么,但建立在上面,它是相当可猜测的:我们正在搜索单词findme并且它发生了在一些行中。所以这些行是选择,这使它们与任何没有findme的上下文行区别开来;这些行未被选中。 (但见下文!)

以下是搜索单词findme的示例。 Git会将or标记为红色,否则默认情况下不会着色,所以我跑了:

or

添加行号以及使用git -c color.grep.selected=green grep -C 2 -n or 。不幸的是我无法让StackOverflow为我设置颜色代码,所以我会使用粗体,其中Git使用绿色,而斜体使用红色:

selected=green
pfod.py-11-
pfod.py-12-This is basically a hybrid of a class and an OrderedDict,
pfod.py:13:or, sort of a data-only class. When an instance of the
pfod.py-14-class is created, all its fields are set to None if not

这里我们两边都有两条未选中的线,根本没有任何颜色;中间有一条选定的行,在一条选定的行中出现两次pfod.py-15-initialized.

在某些情况下, 只是上下文的行实际上是匹配的:

or
pfod.py-47- self[field] = None
pfod.py-48- if len(kwargs):
pfod.py:49: raise TypeError('unexpected kwargs %s' % kwargs.keys())
pfod.py-50- if len(args):
pfod.py:51: raise TypeError('unconsumed args %r' % tuple(args))
pfod.py-52-

这里我们在外边缘有两条未选中的线,然后是两条选中的线,中间有一条非选中的线。这意味着上下文行也可以选择行!它们可以包含不匹配的文本和匹配的文本。这有点特别奇怪,因为如果一个上下文行有匹配,它就会变成一个选定的行 - 那么为什么会有一个pfod.py-53- def __getattr__(self, attr): 呢?如果上下文行具有匹配项,则它将更改为选定的行。

通常情况下,设置__getattr__永远不会产生任何影响,因为如果 匹配一个上下文行,它就会变为一个选定的行并matchContext不再适用。但是当使用color.grep.matchContext时,一切都会被交换掉。这是the documentation定义选择的术语(尽管不是很好):

  

color.grep.matchContext-v

     

选择不匹配的行。

也就是说,grep的-v选项反转行选择。通常情况下,找到匹配意味着该行已被选中,因此您获得--invert-match(默认=无,但我设置上方为-v)和selected(默认=“粗体红色”)颜色。但是对于green,匹配的每一行都是 de - 被选中,并且只选择匹配的行。那么现在选择上下文行,并且取消选择匹配行。所以现在对于匹配线我们再没有颜色,除了匹配本身,我们得到任何matchSelected颜色我们设置(默认再次“粗体红色”)。 (当然,如果打开上下文,匹配的行只会出现,因为grep只输出未选择的行作为上下文行。您还可以设置-v以获取那些matchContext上下文行彩色。)

最后:

  

color.grep.context

     

匹配文字(与设置-vmatch相同)

这只是设置两者的简写。当matchContext无用时(非matchSelected),它会有效地作为matchContext的别名。当-v无用时(matchSelected),它会有效地作为matchSelected的别名。 Git在内部使用它来设置“粗体红色”默认值。