zstyle
Parece que es solo un lugar central para almacenar y recuperar datos, como una alternativa a export
los parámetros de shell. ¿Es eso cierto o hay más?
zstyle
Parece que es solo un lugar central para almacenar y recuperar datos, como una alternativa a export
los parámetros de shell. ¿Es eso cierto o hay más?
Respuestas:
zstyle
maneja el control de estilo obvio para el sistema de finalización, pero parece abarcar más que eso. Por ejemplo, el vcs_info
módulo se basa en él para mostrar el estado de git en su solicitud. Puede comenzar mirando los pocos párrafos explicativos man zshmodules
en la zstyle
sección.
Simplemente puede invocarlo para ver qué configuraciones están vigentes. Esto puede ser instructivo.
El Libro Zsh tiene un buen tratamiento de capítulos sobre zstyle
, también, explicando en detalle sus diversos campos.
Puede buscar en el .../Completion/
directorio de su sistema para ver cómo hacen uso algunos de esos archivos zstyle
. Un lugar común está cerca /usr/share/zsh/functions/Completion/*
. Veo que se usa en más de 100 archivos en mi sistema allí. Los usuarios a menudo también se han zstyle
rociado alrededor de ellos ~/.zshrc
. Aquí hay algunos buenos para agregar un poco de color y descripciones para completar:
# 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'
# ...
El sistema de finalización aclara la mayoría de los campos si juegas con él. Intenta escribir zstyle :«tab»
y verás algunas opciones. Pestaña completa al siguiente punto y verás el siguiente conjunto de opciones, etc.
Para comprender correctamente cómo zstyle
funciona, primero debe comprender que zsh es un programa modular. Desdeman zshmodules
Algunas partes opcionales de zsh están en módulos, separados del núcleo del shell. Cada uno de estos módulos puede vincularse al shell en el momento de la compilación, o puede vincularse dinámicamente mientras el shell se está ejecutando si la instalación admite esta característica. [...]
En este sentido, zsh se parece más a un intérprete como PHP, donde los comandos integrados principales se definen en el módulo "núcleo", pero otros comandos incorporados están contenidos en "módulos".
Ok genial, entonces ¿qué es "zstyle"?
zsh, al igual que otros shells, tiene comandos incorporados, como source
, cd
o declare
- zstyle
es solo uno más de estos "builtins".
Las opciones integradas y de shell suelen ser "globales" en el sentido de que generalmente son aplicables (pero no siempre) aplicables / utilizables en cualquier momento o contexto a lo largo del proceso de shell, o en otras palabras, generalmente se aplican a zsh y a todos los subsistemas (módulos). Tenga en cuenta que esto se aplica si se invoca un shell como intérprete interactivo o no interactivo.
Así, por ejemplo, puede usar de la orden interna source
o cd
o la opción del shell "Globstar" serán válidas ya sea en un símbolo del sistema o en una case
declaración en un script no interactivo o en una función en ese mismo guión.
Contrariamente a otra respuesta anterior, zstyle
no es un componente específico del módulo "compsys" (sistema de terminaciones), zstyle
es un elemento integrado "global".
zstyle
está definido por el zsh/util
módulo, esto simplemente significa que el código que define cómo analizar y "hacer" zstyle
está definido en el zsh/zutil
módulo.
También podrías olvidar este hecho, es decir, bash no requiere que sepas que el código para la eval
construcción está contenido en el archivo eval.c
, pero para obtener ayuda zstyle
, es útil saber que zstyle
es una construcción definida en el zsh/zutil
módulo, y zsh/zutil
Se puede acceder a la documentación del módulo ejecutando man zshmodules
.
Así que, tradicionalmente, las opciones de shell generalmente han sido "globales", pero según la descripción de man zshmodules
, algunas partes opcionales de zsh están en módulos , y también, mucha de la zsh
funcionalidad se ha escrito en funciones de shell. (similar a cómo se ha escrito una gran cantidad de funciones básicas y opcionales de vim en vimscript).
Entonces, si desea poder especificar las opciones que se aplican solo a estos módulos o funciones, ¿cómo lo haría?
Bueno, eso es lo zstyle
que te da, la capacidad de "apuntar" a las opciones a un nivel mucho más fino que las opciones de shell "globales" tradicionales.
zstyle
logra esto a través del argumento"pattern"
Un comando de ejemplo que configura un comportamiento opcional específico para "compsys":
zstyle ':completion::complete:lsof:*' menu yes select
y configurando un comportamiento opcional específico para "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 '
Pero no se detiene allí, la zstyles
capacidad de enfocar contextos es increíblemente poderosa, por ejemplo, digamos que desea definir algunas opciones de comportamiento para la vcs_info
característica, cuando era un .git
repositorio, en lugar de un svn
repositorio, entonces podría modificar el patrón de contexto
:vcs_info:<svn_or_whatever_SCM_system>:* <style>
¿Qué pasa con el comportamiento opcional para un proyecto específico, con un svn
repositorio? luego
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
La única descripción vagamente significativa del estilo "(z)" estúpidamente nombrado y mal documentado que he encontrado proviene del glosario de From Bash To The Z Shell
style
En
zsh
, el mecanismo de estilo es una forma flexible de configurar complementos de shell que utilizan funciones, como el sistema de finalización y los widgets del editor. A diferencia de las variables, pueden ser diferentes en diferentes contextos y, a diferencia de las opciones de shell, pueden tomar valores. El mecanismo se basa en el estilo del comando.
Además, en la sección "Estilos de manejo", el autor elabora más ...
Con funciones de finalización más sofisticadas, es posible que desee permitir que se puedan configurar aspectos del comportamiento de la función mediante el uso
style
.... muchas funciones auxiliares buscan estilos para usted, por lo que su función reaccionará a muchos estilos sin que su función tenga que hacer nada en particular. Para tener una idea de los estilos buscados en una situación particular, invoque la función _complete_help con un argumento numérico. Normalmente, puede hacer esto presionando Esc2seguido de Ctrl
-
x h. Esto es principalmente útil al configurar la finalización porque le permite ver qué estilos se buscan y el contexto asociado.
Una de las cosas más frustrantes de ZSH es averiguar dónde encontrar sus diversos comandos en las páginas de manual. En este caso, la documentación para zstyle se puede encontrar aquíman zshmodules
o en línea .
Este comando incorporado se utiliza para definir y buscar estilos. Los estilos son pares de nombres y valores, donde los valores consisten en cualquier número de cadenas. Se almacenan junto con los patrones y la búsqueda se realiza dando una cadena, llamada 'contexto', que se compara con los patrones. Se devolverá la definición almacenada para el primer patrón coincidente.
Hay una gran falta de buenos ejemplos en el espacio zsh, y la documentación es obtusa. Pasé algún tiempo mirando cómo Prezto usa zstyle, así como leyendo los documentos y probando algunas cosas. zstyle parece usarse principalmente en terminaciones, pero en realidad es realmente bueno para almacenar datos de una manera que es más sofisticada que las variables de entorno simples.
Este resumen muestra cómo puede usar zstyle para almacenar y recuperar información:
# 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*'