3

我正在尝试为我的 Git 自定义颜色。

阅读完文档后,我找到了我想要设置的选项。

除了 Grep,一切都运行良好。我意识到,我过去并没有真正使用过它。

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

我不知道matchContextandmatch指的是什么以及它们与 and 有何matchSelected不同selected

matchSelected为我搜索的实际文本设置颜色,同时selected引用该匹配的行级(?)上下文

那么,在match做什么呢?设置什么matchContext?到底在哪里对这些有好的、详细的描述呢?

任何人?

4

2 回答 2

4

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

context

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

matchContext

     匹配上下文行中的文本

matchSelected

     匹配选定行中的文本

selected

     选定行中的不匹配文本

(我已经忽略了match;我们一会儿再把它放回去)。假设我们 run git grep findme,所以我们有一个搜索词。

三个技术术语,例如它们,这里是:

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

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

    请注意,这些之前和/或之后的行可能没有它们findme- 但话又说回来,它们可能!

  • 选定的行:Git 有点隐藏这意味着什么,但在上面的基础上,它是相当可以猜测的:我们正在搜索这个词findme,它出现在某些行中。因此,这些行被选中,这将它们与其中没有的任何上下文行区分开来findme;那些行没有被选中。(但见下文!)

这是一个示例,在搜索单词时or。默认情况下, Git 将着色or为红色,否则不着色,所以我运行:

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

它添加了行号以及使用selected=green. 不幸的是,我无法让 StackOverflow 为我进行颜色编码,因此我将在 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__(self, attr):

在这里,我们在外边缘有两条未选中的线,然后是两条选中的线,中间有一条未选中的线。这意味着上下文行也可以是选定的行!它们可以同时具有非匹配文本和匹配文本。这有一些特别奇怪的地方,因为如果上下文行有匹配项,它就会成为选定的行——那么为什么会有 amatchContext呢?如果上下文行有匹配项,它将变为选定行。

通常,设置color.grep.matchContext永远不会产生任何影响,因为如果在本来应该是上下文行的内容中有匹配,它会变为选定的行并且不再color.grep.matchContext适用。但是当使用时,-v一切都会被交换。这是文档定义(虽然不是很好)术语selected的地方:

-v,--invert-match

     选择不匹配的行。

也就是说,grep 的-v选项会反转行选择。通常,找到匹配意味着选择了该行,因此您将获得selected(default = none,但我在green上面设置) 和matchSelected(default = "bold red") 颜色。但是使用-v,每条匹配的行都会被取消选择,并且只选择匹配的行。所以现在选择了上下文行,并取消选择匹配行。所以现在对于匹配线,我们再次没有颜色,除了匹配本身,我们得到matchContext我们设置的任何颜色(再次默认为“粗体红色”)。(当然,只有打开上下文才会出现匹配的行,因为 grep 只会将未选择的行输出为上下文行。您也可以设置color.grep.context使这些-v上下文化的线条着色。)

最后:

match

     匹配文本(与设置matchContext和相同matchSelected

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

于 2016-08-04T23:16:10.390 回答
0

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

检查您是否仍需要将这些颜色与 Git 2.35(2022 年第一季度,5 年后)进行比较/测试:

git grep" " ( man )使用的调色板已经更新以匹配 GNU grep的调色板。

请参阅Lénaïc Huard ( ) 的提交 b83f99c(2022 年 1 月 5 日(由Junio C Hamano 合并 -- --提交 c0450ca中,2022 年 1 月 10 日)L3n41c
gitster

grep: 将默认颜色与 GNU grep 对齐

签字人:Lénaïc Huard

git-grep( man )与标准 grep 工具共享许多选项。
与 GNU grep 一样,它具有突出显示匹配文本的着色选项。
和它一样,它可以选择自定义各种颜色的部分。

这个补丁更新了默认git-grep颜色,使它们与GNU grep 默认颜色相匹配。

通过设置各种选项可以获得相同的结果color.grep.<slot>,但是此补丁使( man )在默认情况下共享相同的配色方案,而无需任何用户配置。git grep --colorgrep --color

于 2022-01-14T17:36:31.940 回答