Варианты цвета Git Grep объяснены и / или сравнены

Я пытаюсь настроить цвет моего Git.

Прочитав документацию, я нашел параметры, которые хотел установить.

Все работало нормально, кроме Grep. Я понял, я действительно не использовал это в прошлом.

Я хотел установить цвета для него с той же палитрой, но я не мог проверить некоторые из них...

Я понятия не имею что matchContext а также match обратитесь и чем они отличаются от matchSelected а также selected,

matchSelected устанавливает цвет для фактического текста, который я искал, в то время как selected ссылается на контекст уровня строки (?) этого соответствия.

Итак, что же match делать? Что значит matchContext задавать? И где, черт возьми, хорошее, подробное описание этих?

Кто-нибудь?

2 ответа

Решение

Вот что говорит связанная документация, немного подрезанная, чтобы все это работало лучше:

context

несоответствующий текст в контекстных строках (при использовании -A, -B, или же -C)

matchContext

сопоставление текста в контекстных строках

matchSelected

соответствующий текст в выделенных строках

selected

несоответствующий текст в выделенных строках

(Я пропустил 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, К сожалению, я не могу заставить Stackru раскрасить это для меня, поэтому вместо этого я буду использовать жирный шрифт, где 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):

Здесь у нас было две невыбранные линии по внешним краям, затем две выделенные линии с невыбранной линией между ними. Это подразумевает, что контекстные строки также могут быть выделены! Они могут иметь как несоответствующий текст, так и соответствующий текст. В этом есть что-то особенно странное, потому что если у контекстной строки есть совпадение, она становится выбранной строкой - так почему же matchContext совсем? Если у контекстной строки есть совпадение, она превращается в выбранную строку.

Как правило, настройка color.grep.matchContext никогда не имеет никакого эффекта, потому что если есть совпадение в пределах того, что было бы контекстной строкой, оно превращается в выбранную строку и color.grep.matchContext больше не применяется. Но при использовании -v все обменивается. Вот где документация определяет (хотя и не очень хорошо) выбранный термин:

-v, --invert-match

Выберите несовпадающие строки.

То есть grep -v опция инвертирует выбор строки. Обычно поиск совпадения означает, что линия выбрана, поэтому вы получите selected (по умолчанию = нет, но я установил green выше) и matchSelected (по умолчанию = "жирный красный") цвета. Но с -v, каждая строка, у которой есть соответствие, отменяется, и выбираются только несовпадающие строки. Итак, теперь были выбраны строки контекста, а соответствующие строки отменены. Так что теперь для совпадающих линий мы снова не получаем цвет, кроме самого соответствия, где мы получаем любой matchContext цвет мы устанавливаем (по умолчанию снова "жирный красный"). (Конечно, строки с соответствием выходят только при включении контекста, поскольку grep выводит только невыбранные строки как строки контекста. Вы также можете установить color.grep.context чтобы получить те -v контекстные строки раскрашены.)

В заключение:

match

соответствующий текст (такой же, как настройка matchContext а также matchSelected)

Это просто сокращение, чтобы установить оба. когда matchContext бесполезен (не -v), он эффективно работает как псевдоним для matchSelected, когда matchSelected бесполезно (-v), он эффективно работает как псевдоним для matchContext, Git использует его внутри, чтобы установить "жирный красный" по умолчанию.

Я хотел установить для него цвета той же палитрой, но не смог протестировать некоторые из них.

Проверьте, нужно ли вам все еще сравнивать/тестировать эти цвета с Git 2.35 (1 квартал 2022 г., 5 лет спустя):

Цветовая палитра, используемая "git grep" ( ) был обновлен , чтобы соответствовать GNU grep.

См. (5 января 2022 г.) Ленаика Уара ( L3n41c) .
(Объединено Junio ​​C Hamano -- gitster-- в коммите c0450ca, 10 января 2022 г.)

коммит b83f99cgrep: выровнять цвета по умолчанию с цветами GNU grep

Подписал: Ленаик Уар

( manman ) имеет много общих параметров со стандартным инструментом grep.
Как и в GNU grep, у него есть варианты раскраски для выделения соответствующего текста.
И, как и он, у него есть варианты настройки различных цветных частей.

Этот патч обновляет стандартный git-grepцвета, чтобы они соответствовали цветам GNU grep по умолчанию .

Тот же результат можно было получить, устанавливая различные color.grep.<slot>вариантов, но этот патч делаетgit grep --color(мужчина ) имеет ту же цветовую схему, что и grep --colorпо умолчанию без каких-либо пользовательских настроек.

Другие вопросы по тегам