zstyle
здається, що це просто центральне місце для зберігання та отримання даних, як альтернатива export
параметрам -ing оболонки. Це правда, чи є в ній більше?
zstyle
здається, що це просто центральне місце для зберігання та отримання даних, як альтернатива export
параметрам -ing оболонки. Це правда, чи є в ній більше?
Відповіді:
zstyle
обробляє очевидний стиль управління системою завершення, але, здається, охоплює більше, ніж просто це. Наприклад, vcs_info
модуль покладається на нього для відображення статусу git у вашому запиті. Ви можете почати дивитися на кілька пояснювальних пунктів в man zshmodules
в zstyle
розділі.
Ви можете просто викликати його, щоб побачити, які налаштування діють. Це може бути повчальним.
Zsh Книга має хорошу обробку главу про zstyle
, також, пояснюючи в деталях різних областях.
Ви можете позіхати в .../Completion/
каталозі вашої системи, щоб побачити, як деякі з цих файлів використовують zstyle
. Спільне місце розташування поруч /usr/share/zsh/functions/Completion/*
. Я бачу, що він використовується у 100+ файлах моєї системи. Користувачі часто також zstyle
посипалися навколо ~/.zshrc
. Ось кілька приємних, щоб додати трохи кольорів та описів до завершення:
# Do menu-driven completion.
zstyle ':completion:*' menu select
# Color completion for some things.
# http://linuxshellaccount.blogspot.com/2008/12/color-completion-using-zsh-modules-on.html
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
# formatting and messages
# http://www.masterzen.fr/2009/04/19/in-love-with-zsh-part-one/
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format "$fg[yellow]%B--- %d%b"
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format "$fg[red]No matches for:$reset_color %d"
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
zstyle ':completion:*' group-name ''
# Completers for my own scripts
zstyle ':completion:*:*:sstrans*:*' file-patterns '*.(lst|clst)'
zstyle ':completion:*:*:ssnorm*:*' file-patterns '*.tsv'
# ...
Система заповнення робить більшу частину полів зрозумілою, якщо ви пограєте з нею. Спробуйте ввести, zstyle :«tab»
і ви побачите деякі варіанти. Виберіть вкладку до наступної двокрапки, і ви побачите наступний набір параметрів тощо.
Щоб правильно зрозуміти, як zstyle
працює, спершу потрібно зрозуміти, що zsh - це модульна програма. Зman zshmodules
Деякі необов'язкові частини zsh знаходяться в модулях, окремо від серцевини оболонки. Кожен з цих модулів може бути підключений до оболонки під час збирання або може бути динамічно пов'язаний під час роботи оболонки, якщо установка підтримує цю функцію. [...]
У цьому плані zsh більше схожий на інтерпретатора на зразок PHP, де основні вбудовані команди визначені в модулі "core", а інші вбудовані команди містяться в "модулях".
Гаразд чудово, так що тоді "zstyle"?
zsh, як і інші оболонки, має вбудовані команди, такі як source
, cd
або declare
- zstyle
просто черговий із цих "вбудованих".
Параметри вбудованих і оболонок, як правило, "глобальні" в тому сенсі, що вони, як правило, (але не завжди) застосовні / застосовні в будь-який час або контекст протягом оболонки, або іншими словами, вони зазвичай застосовуються до zsh та всіх підсистем (модулі). Зауважте, це стосується того, чи оболонка викликається як інтерактивний чи неінтерактивний перекладач.
Так, наприклад , ви можете використовувати вбудований - й source
або cd
або варіант оболонки «globstar» буде чи дійсні в командному рядку або в case
заяві в неінтерактивному скрипті або в функції в тому ж скрипті.
Всупереч іншій відповіді, наведеній вище, zstyle
не вбудований, який є специфічним для модуля "compsys" (система доповнень), zstyle
не є "глобальним" вбудованим.
zstyle
визначається zsh/util
модулем, це просто означає, що код, який визначає, як розбирати, і "робити" zstyle
, визначений в zsh/zutil
модулі.
Ви можете так само забути цей факт, тобто bash не вимагає, щоб ви знали, що код для eval
вбудованого міститься у файлі eval.c
, але для отримання довідки zstyle
, це допомагає знати, що zstyle
це вбудований zsh/zutil
модуль, і zsh/zutil
Доступ до документації для модуля можна отримати за допомогою запуску man zshmodules
.
Таким чином, традиційно параметри оболонки зазвичай були "глобальними", але згідно опису з man zshmodules
, Деякі необов'язкові частини zsh є в модулях , а також багато zsh
функцій написано в оболонках. (подібно до того, як багато основних і необов'язкових функцій vim було написано у vimscript).
Тож якщо ви хочете мати можливість вказати параметри, що застосовуються саме до цих модулів або функцій, як би ви це зробили?
Ну, це все, що zstyle
дає можливість націлювати параметри на значно тонший рівень, ніж традиційні "глобальні" варіанти оболонки.
zstyle
досягає цього аргументом"pattern"
Приклад команди, яка налаштовує деяку необов'язкове поведінку, характерну для "compsys":
zstyle ':completion::complete:lsof:*' menu yes select
та налаштування деякої необов'язкової поведінки, характерної для "vcs_info":
zstyle ':vcs_info:*' actionformats \
'%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
Але це на цьому не зупиняється, zstyles
здатність орієнтуватися на контексти неймовірно потужна, наприклад, скажімо, ви хотіли визначити деяку поведінку / параметри для vcs_info
функції, коли ви були .git
сховищем, на відміну від svn
репо, тоді ви можете змінити контекстний візерунок
:vcs_info:<svn_or_whatever_SCM_system>:* <style>
А як щодо необов'язкової поведінки для конкретного проекту з svn
репо? потім
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
Єдиний розпливчасто змістовний опис дурно названого та погано задокументованого стилю (z) "Я знайшов - походить із словника" Bash To The Z Shell "
style
У
zsh
механізмі стилю являє собою гнучкий спосіб настройки оболонки add- доповнення , які використовуйте функції, такі як система закінчення і редактор віджети. На відміну від змінних, вони можуть бути різними в різних контекстах і на відміну від параметрів оболонки вони можуть приймати значення. Механізм заснований на стилі команд.
також у розділі "Поводження зі стилями" автор далі детально розглядає ...
Завдяки більш досконалим функціям завершення ви можете дозволити налаштування аспектів поведінки функції за допомогою
style
.... багато допоміжних функцій шукають стилі для вас, щоб ваша функція реагувала на багато стилів, без вашої функції не потрібно нічого робити зокрема. Щоб отримати уявлення про стилі, які шукаються в конкретній ситуації, виклик функції _complete_help з числовим аргументом. Як правило, ви можете це зробити, натиснувши і Esc2слідуючи Ctrl
-
x h. Це в першу чергу корисно при налаштуванні завершення, оскільки дозволяє побачити, які стилі шукаються та пов'язаний контекст.
Однією з найприємніших речей про ZSH є з'ясування, де знайти різні команди на сторінках man. У цьому випадку документацію щодо zstyle можна знайти в мережі Інтернетman zshmodules
або тут .
Ця вбудована команда використовується для визначення та пошуку стилів. Стилі - пари імен та значень, де значення складаються з будь-якої кількості рядків. Вони зберігаються разом з візерунками, а пошук відбувається шляхом надання рядка, званого 'контекст', який порівнюється з шаблонами. Визначення, збережене для першого узгодження, буде повернуто.
У zsh просторі не вистачає хороших прикладів, а документація тупа. Я провів деякий час, переглядаючи, як Prezto використовує zstyle, а також читав документи та пробував деякі речі. Zstyle, здається, використовується в основному в доповненнях, але насправді дуже гарний для зберігання даних способом, який є більш складним, ніж звичайні змінні старого середовища.
Цей суть показує, як ви можете використовувати zstyle для зберігання та отримання інформації:
# reference: http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fzutil-Module
# list all zstyle settings
zstyle -L
# set a string value
zstyle :example:favorites fruit apple
# set an explicit string value
zstyle -s ':example:favorites' 'computer' 'apple'
# assign new $fav variable with -g
zstyle -g fav ':example:favorites' fruit && echo $fav
# be explicit about the assignment data type:
# -a: array, -b: boolean, -s: string
zstyle -b ':example:favorites:vegtable' 'broccoli' no
# test with -t
if zstyle -t ':example:favorites' 'fruit' 'apple'; then
echo "an apple a day keeps the dr. away"
fi
if ! zstyle -t ':example:favorites:vegtable' 'broccoli' 'no'; then
echo "Broccoli is the deadliest plant on Earth - why, it tries to warn you itself with its terrible taste"
fi
# delete a value with -d
zstyle -d ':example:favorites' 'computer'
# list only zstyle settings for a certain pattern
zstyle -L ':example:favorites*'