Варианты цвета 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 г.)
коммит b83f99c
grep
: выровнять цвета по умолчанию с цветами GNU grepПодписал: Ленаик Уар
( manman ) имеет много общих параметров со стандартным инструментом grep.
Как и в GNU grep, у него есть варианты раскраски для выделения соответствующего текста.
И, как и он, у него есть варианты настройки различных цветных частей.Этот патч обновляет стандартный
git-grep
цвета, чтобы они соответствовали цветам GNU grep по умолчанию .Тот же результат можно было получить, устанавливая различные
color.grep.<slot>
вариантов, но этот патч делаетgit grep --color
(мужчина ) имеет ту же цветовую схему, что иgrep --color
по умолчанию без каких-либо пользовательских настроек.