zsh-syntax-highlighting записывает расширение параметра черным цветом

zsh-syntax-highlighting записывает расширение параметра черным цветом

Я установилzsh-синтаксис-подсветка. Это работает хорошо, за исключением одной странности: когда я ввожу расширение параметра в качестве аргумента команды, т. е.

foo $PWD

как только я набираю $P, расширение параметра окрашивается в черный цвет (что делает его невидимым, поскольку я использую терминал с черным фоном). Он остается черным, когда я набираю $PW, и становится видимым (цвет переднего плана, но подчеркнутым) после того, как набирается $PWD. Похоже, что атрибуты подсветки - "fg=black" для "незаконченного/неизвестного" параметра, но просто unline для известного параметра.

Мне нравится, что они окрашены по-разному, так как таким образом я могу обнаружить опечатки в имени переменной заранее. Однако черный цвет нечитаем, так как у меня также черный фон.

Что еще интереснее, это происходит только в том случае, если первое слово в строке является либо внешней командой (как fooв моем примере), либо ключевым словом синтаксиса ( if). Этого не происходит, если первое слово в строке является внутренней командой (например, echo), или вызовом псевдонима, или вызовом функции.

Я поискал в документации, но не нашел, где можно было бы определить эту окраску «незавершенного расширения параметров».

Я использую следующие маркеры:

ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern line)

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

Я выделяю некоторые очень конкретные параметры, которые важны для меня, например:

ZSH_HIGHLIGHT_PATTERNS+=('$(oncoll|onyt|oncp|ong)' 'fg=black,bold,bg=white')

Но это также не может оказать никакого влияния на описанную здесь проблему.

Кто-нибудь случайно не знает, какая настройка стиля здесь на меня влияет?

решение1

Вы можете найти все стили по умолчанию для mainмаркераздесь.

На данный момент единственным стилем по умолчанию, в котором текст ( fg) настроен на черный цвет, являетсякомментарий.

Я не знаю, почему именно этот foo $PWпример считается комментарием, нодокументацияописывает commentкак:

comment- комментарии, когда setopt INTERACTIVE_COMMENTSдействует ( echo # foo)
comment- пропущенные параметры в позиции команды ( $x lsкогда $xне задано или пусто)

Второе условие, похоже, вступило в силу, поскольку, $PWскорее всего, не установлено.

Связанный контент