Вот что говорит связанная документация, отделанные немного, чтобы сделать все это работать лучше:
context
без согласования текста в контекстных строк (при использовании -A
, -B
, или -C
)
matchContext
соответствующий текст контекстных строк
matchSelected
соответствующий текст в выбранных строках
selected
без мата ching text в выделенных линиях
(Я упустил match
; мы вернем это через мгновение). Предположим, мы запустили 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__
(самость, атр) :
Здесь у нас были две невыбранные линии на внешних краях, затем две выделенные линии с невыбранной линией между ними. Это означает, что линии контекста также могут быть выбраны линиями!Они могут иметь как несоответствие текст и соответствие текст. В этом есть что-то особенно странное, потому что, если строка контекста имеет совпадение, она становится выбранной линией - так почему же существует matchContext
? Если строка контекста имеет совпадение, она изменяется на выбранную строку.
Обычно установка color.grep.matchContext
никогда не имеет никакого эффекта, потому что если является матч в то, что был бы контекст строки, она изменяется в выбранной строке и color.grep.matchContext
больше не применяется. Но при использовании -v
все обменивается. Это где the documentation определяет (хотя и не очень хорошо) термин выбран:
-v
, --invert-match
Выберите несовпадающие линии.
То есть, -v
вариант Grep в инвертирует выбор линии. Обычно поиск соответствия означает, что линия выбрана, поэтому вы получаете selected
(по умолчанию = нет, но я установил green
выше) и matchSelected
(по умолчанию = «полужирный красный»). Но с -v
каждая строка, которая имеет совпадение, равна de -избирается, и только не -выбранные линии выбраны. Итак, теперь то, что было, выделены контекстные линии, а соответствующие линии не выбраны. Итак, теперь для совпадающих строк мы не получаем цвет снова, кроме самого совпадения, где мы получаем любой цвет matchContext
, который мы установили (по умолчанию снова «жирный красный»). (Конечно, линии с матчем выходят только если вы включите от контекста, так как Grep выводит только невыбранные строки как контекстные строки. Можно также установить color.grep.context
, чтобы получить эти -v
контекстно-роскопию линии раскрашенной.)
Наконец :
match
соответствующий текст (такой же, как и установка matchContext
matchSelected
)
Это всего лишь сокращенная версия для обоих. Когда matchContext
бесполезен (не -v
), он эффективно работает как псевдоним для matchSelected
. Когда matchSelected
бесполезен (-v
), он эффективно работает как псевдоним для matchContext
. Git использует его внутри, чтобы установить «смелый красный» по умолчанию.
Эй! Ваш ответ потрясающий! Я понял, что я пропустил некоторые части документации, однако, я хотел собрать тест и ... ну ... я все еще не понял все. Как-то все это меня прослушивало. Я не мог точно воспроизвести то, что хотел. Я не мог «вернуться», когда решил открыть этот вопрос. И, наконец, после того, как я сидел на нем не менее 3 часов, я понял: Приказ является ключевым! Я получаю разные результаты, просто изменив порядок 'match',' matchContext', 'matchSelected' и' selected' в файле _.gitconfig_! – ppseprus
Ладно .. так .. снова, я не умею читать! : D – ppseprus
Настолько потрясающе!Почему я не могу дать вам больше бонусов? И трюк с использованием опции '-c' для одноразовых изменений конфигурации ... бесценный! Спасибо Спасибо!! –