2016-08-04 59 views
2

我试图自定义颜色我的Git。解释和/或比较Git Grep颜色选项

在阅读documentation后,我发现我想要设置的选项。

除Grep外,一切正常。 我意识到,过去我没有真正使用它。

我想为它设置颜色具有相同的调色板,但我无法测试他们中的一些...

我不知道什么matchContextmatch指,他们是如何比matchSelected不同, selected

matchSelected设置了我搜索的实际文本颜色,而作为selected提到的线路电平(?)该匹配的上下文

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

有人吗?

回答

2

这里的链接文件说什么,修剪了一下,使这一切发展得更好:

context

       使用-A当上下文行(不匹配的文本,-B-C

matchContext

在选定的行

selected

       非垫在上下文行0

       匹配文本

matchSelected

       匹配的文本ching text选中的行

(我遗漏了match;我们会稍后再说)。假设我们运行git grep findme,只是我们有一个搜索词。

三个技术术语,比如他们,这里有:

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

  • 上下文行:这里的线索是提及三个标志。你可以在上下文(-B),“之后”上下文(-A)或两者(-C)之间获得,这基本上意味着如果你正在搜索findme并且Git发现它会打印出不仅仅是字findme在里面,但也有一些线前后。

    请注意,这些之前和/或之后的行可能而不是其中有findme - 但他们可能再次!

  • 选择线:Git的那种隐藏这意味着什么,但建立在上面,这是相当猜测能:我们正在寻找的字findme,它发生在一些线(S)。所以这些行是选择,它们与其中没有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__(个体经营,ATTR) :

这里我们在外边缘有两条未选中的线,然后是两条选中的线,中间有一条未选中的线。这意味着上下文行也可以被选中行!他们可以同时具有不匹配的文字和匹配的文字。这里有一些特别的奇怪,因为如果上下文线有匹配的话,它会变成一个选定的线 - 那么为什么会有一个matchContext呢?如果上下文线具有匹配,则它变为选定的线。

通常情况下,设置color.grep.matchContext从未有任何影响,因为如果有内会是怎样被上下文线的匹配,它改变成所选行和color.grep.matchContext不再适用。但是当使用-v时,一切都会被换掉。这是the documentation定义(虽然不是很好)选择术语

-v--invert-match

       选择不匹配的行。

也就是说,grep的的-v选项反转行选择。通常情况下,找到一个匹配意味着该行被选中,因此您获得selected(默认=无,但我设置了上面的​​)和matchSelected(默认=“粗体红色”)的颜色。但是与-v,每条匹配的行都是de-已选中,且只有-匹配行被选中。所以现在选择上下文行,并且匹配行被取消选择。所以现在匹配线我们再没有颜色,除了比赛本身,我们得到任何matchContext颜色我们设置(默认再次“粗体红色”)。 (当然,与匹配线才会出现,如果你打开上下文,因为grep的唯一输出非选择行作为上下文行。您还可以设置color.grep.context得到这些-v上下文美化版线彩色)

最后:

match

       匹配文本(相同设定matchContextmatchSelected

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

+0

嘿!你的回答非常棒!我意识到我跳过了文档的某些部分,但是,我想整理一个测试,然后......呃...我还是没有把它全部弄清楚。不知怎的,整个事情都困扰着我。我无法完全重现我想要的。当我决定打开这个问题时,我不能“回头”。 最后,坐在它上面至少3个小时后,我意识到: 顺序是关键!只需在_.gitconfig_文件中更改'match','matchContext','matchSelected'和'selected'的顺序即可得到不同的结果! – ppseprus

+0

好吧..再次,我无法阅读! :D – ppseprus

+0

太棒了!为什么我不能给你更多的赞扬?而使用'-c'选项一次性更改配置的技巧......无价!谢谢谢谢!! –