Как работает синтаксис списка цветов zsh?

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

zstyle ':completion:*:tasks:*' list-colors "=(#b) #([^ ]#)*=$color[white]=$color[yellow]=$color[red]"

Все, что я знаю, это то, что '#' и '##' являются регулярными выражениями, эквивалентными '.' и «+». Каждый раз, когда я пытаюсь немного изменить синтаксис, кажется, что соответствие нарушается. Может ли кто-нибудь опубликовать несколько простых примеров или ресурсов (к сожалению, в документации по zsh очень мало примеров)? Как мне, например, сопоставить строку '--'?


person saller    schedule 18.04.2014    source источник


Ответы (1)


Вот несколько примеров.

Что-то простое для начала, пусть все теги параметров будут зелеными:

zstyle ':completion:*:parameters'  list-colors '=*=32'

Как видите, синтаксис '=pattern=format'. Поскольку * соответствует всему, а 32 — зеленый код ANSI, поэтому все параметры будут зелеными.

Теперь давайте отобразим все команды жирным шрифтом красного цвета.

zstyle ':completion:*:commands' list-colors '=*=1;31'

но встроенные команды с чуть более сложным цветом (из 256 палитры)

zstyle ':completion:*:builtins' list-colors '=*=1;38;5;142'

аналогично для псевдонимов

zstyle ':completion:*:aliases' list-colors '=*=2;38;5;128'

Теперь давайте перейдем к шаблонам и по-разному раскрасим разные части завершения, скажем, мы хотим, чтобы процессы уничтожения были окрашены в 3 разных цвета:

zstyle ':completion:*:*:kill:*' list-colors '=(#b) #([0-9]#)*( *[a-z])*=34=31=33'

Здесь синтаксис немного сложнее, а именно '=(#b)(pattern1)(pattern2)=format0=format1=format2', где format0 используется для всего, что не соответствует ни одному шаблону. Таким образом, идентификаторы процессов (первый шаблон) будут выделены красным, имена процессов (второй шаблон) — желтым, а остальные — синим:

введите здесь описание изображения

Наконец, давайте попробуем что-нибудь полезное со строкой '--', которую вы просили:

zstyle ':completion:*:options' list-colors '=^(-- *)=34'

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

введите здесь описание изображения

Обратите внимание, что некоторые параметры начинаются с '--', поэтому мы должны использовать '--' (с пробелом), чтобы соответствовать только описаниям, и отменить шаблон с помощью ^, чтобы применить цвет к параметрам.

Надеюсь, это поможет

person Community    schedule 09.05.2014
comment
У меня проблемы с последним примером для окрашивания описаний... superuser.com/questions/1200487/ - person Orangenhain; 17.04.2017
comment
Что такое #b? Возникли проблемы с поиском соответствующей документации. - person sevko; 04.05.2020
comment
(#b) not #b — это флаг, который разрешает сопоставление выражений в скобках. Это задокументировано в: 22.7.1 Цветные списки завершения руководства по zsh. - person user841092; 09.04.2021