Я установил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
скорее всего, не установлено.