我正在试着给我的裤子定制颜色。
在阅读了documentation之后,我找到了我想要设置的选项。
除了grep,一切都很好。
我已经意识到,我过去并没有真正使用过它。
我想用同一个调色盘为它设置颜色,但我无法测试其中的一些…
我不知道matchContextmatch指的是什么,它们与matchSelectedselected有什么不同。
matchSelected为我搜索的实际文本设置颜色,而asselected则指行级别(?)匹配的上下文。
那么,match在做什么呢?matchContext设置了什么?这些东西的详细描述到底在哪里?
有人吗?

最佳答案

以下是链接文档中所说的,稍加删减以使其更好地工作:
context
上下文行中的文本不匹配(使用-A-B-C时)
matchContext
__匹配上下文行中的文本
matchSelected
__所选行中的匹配文本
selected
选定行中的不匹配文本
(我漏掉了,match;我们一会儿再把它放回去)。假设我们运行git grep findme,这样我们就有了一个搜索词。
这三个技术术语如下:
匹配文本:这应该很明显。我们正在搜索文本字符串findme,因此这是该字符串的每次出现。对这些类型的固定字符串进行颜色编码匹配不像对模式进行颜色编码那样必要:如果我们在搜索模式,那么查看模式匹配的内容可能会特别有用。
上下文行:这里的线索是提到三个标志。您可以得到“before”context(-B)、“after”context(-A),或者两者都有(-C),这基本上意味着,如果您正在搜索findme并且git发现,它不仅会打印出其中包含单词findme的行,还会打印出该行之前和之后的一些行。
注意,这些before和/或after行中可能没有findme,但随后,它们可能会!
选定行:git有点隐藏了这意味着什么,但是在上面的基础上,它是完全可以猜测的:我们在搜索单词findme时,它出现在一些行中。因此,这些行被选中,这将它们与其中没有findme的任何上下文行区分开来;这些行未被选中。(但见下文!)
下面是一个搜索单词or的例子。Git将以红色显示or,否则默认情况下不显示,因此我运行:

git -c color.grep.selected=green grep -C 2 -n or

它添加行号以及使用selected=green。不幸的是,我不能让stackoverflow为我的代码上色,所以我将在git使用绿色的地方使用粗体,在git使用红色的地方使用斜体:
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__(自我,属性):
在这里,我们在外边缘有两条未选定的线,然后在两条选定的线之间有一条未选定的线。这意味着上下文行也可以被选中!它们可以有不匹配的文本和匹配的文本。这有点特别奇怪,因为如果一个上下文行有一个匹配项,它就会变成一个选中的行,那么为什么会有一个matchContext?如果上下文行有匹配项,则它将变为选定行。
通常,设置color.grep.matchContext不会有任何效果,因为如果在本来是上下文行的内容中有匹配项,则它将变为选定行,并且color.grep.matchContext不再适用。但是当使用-v时,所有东西都会被交换。这就是the documentation定义(尽管不是很好)所选术语的地方:
-v--invert-match
选择不匹配的行。
也就是说,grep的-v选项反转行选择。通常,找到匹配意味着选择了行,因此您将得到selected(默认值为none,但我在上面设置了green)和matchSelected(默认值为bold red)颜色。但使用-v,将取消选择具有匹配的每一行,并且只选择不匹配的行。因此,现在选择了以前的上下文行,并取消选择匹配行。所以现在对于匹配的线,我们不再得到颜色,除了匹配本身,在这里我们得到我们设置的任何matchContext颜色(默认值再次为“粗体红色”)。(当然,只有打开context时,才显示匹配的行,因为grep只输出未选定的行作为context行。您还可以设置color.grep.context以使那些-v上下文化的行着色。)
最后:
match
匹配文本(与设置matchContextmatchSelected相同)
这只是两种情况下的速记。当matchContext无用时(非--v),它可以有效地作为matchSelected的别名。当matchSelected无用(-v)时,它有效地充当matchContext的别名。git在内部使用它来设置“粗体红色”的默认值。

09-04 02:38