2016-08-04 29 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'選項一次性更改配置的技巧......無價!謝謝謝謝!! –