zstyle
veri export
kabuk parametrelerine alternatif olarak verileri depolamak ve almak için sadece merkezi bir yer gibi görünüyor . Bu doğru mu, yoksa daha fazlası var mı?
zstyle
veri export
kabuk parametrelerine alternatif olarak verileri depolamak ve almak için sadece merkezi bir yer gibi görünüyor . Bu doğru mu, yoksa daha fazlası var mı?
Yanıtlar:
zstyle
tamamlama sistemi için bariz stil kontrolünü ele alır, ancak bundan daha fazlasını kapsamaktadır. Örneğin, vcs_info
modül isteminizde git durumunun görüntülenmesi için ona güvenir. Sen birkaç açıklayıcı paragraflar bakarak başlayabilirsiniz man zshmodules
içinde zstyle
bölüm.
Hangi ayarların yürürlükte olduğunu görmek için onu çağırabilirsiniz. Bu öğretici olabilir.
Zsh Kitap güzel bir bölüm tedavisi vardır zstyle
çeşitli alanlar ayrıntılı olarak açıklayan da.
Bu .../Completion/
dosyaların bazılarının nasıl kullanıldığını görmek için sisteminizdeki dizinde dolaşabilirsiniz zstyle
. Ortak bir yer yakın /usr/share/zsh/functions/Completion/*
. Orada sistemimde 100'den fazla dosyada kullanıldığını görüyorum. Kullanıcılar genellikle zstyle
kendi etraflarına da serpilir ~/.zshrc
. Tamamlamanıza biraz renk ve açıklama eklemek için bazı hoş olanlar:
# 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'
# ...
Tamamlama sistemi, onunla oynarsanız alanların çoğunu netleştirir. Yazmayı deneyin zstyle :«tab»
ve bazı seçenekler göreceksiniz. Sonraki iki noktaya kadar sekme tamamladığınızda, bir sonraki seçenek kümesini vb. Görürsünüz.
Nasıl zstyle
çalıştığını düzgün bir şekilde anlamak için , önce zsh'ın modüler bir program olduğunu anlamanız gerekir. itibarenman zshmodules
Bazı isteğe bağlı zsh parçaları, kabuğun çekirdeğinden ayrı olarak modüllerde bulunur. Bu modüllerin her biri oluşturma zamanında kabuğa bağlanabilir veya kurulum bu özelliği destekliyorsa kabuk çalışırken dinamik olarak bağlanabilir. [...]
Bu bağlamda zsh, PHP gibi ana yerleşik komutların "çekirdek" modülünde tanımlandığı, ancak diğer yerleşik komutların "modüllerde" yer aldığı PHP gibi bir yorumlayıcı gibidir.
Tamam harika, o zaman "zstyle" nedir?
zsh, diğer kabuklarda olduğu gibi yerleşik komutlara sahiptir source
, cd
ya da declare
- zstyle
bu "yerleşiklerin" sadece bir diğeri.
builtins ve shell seçenekleri genellikle kabuk işlemi boyunca herhangi bir zamanda veya bağlamda genel olarak (ancak her zaman değil) uygulanabilir / kullanılabilir olmaları anlamında "global" dir veya başka bir deyişle, genellikle zsh ve tüm alt sistemler için geçerlidir. (modüller). Bunun bir kabuğun etkileşimli veya etkileşimli olmayan bir yorumlayıcı olarak çağrılıp çağrılmadığına dikkat edin.
Yani, örneğin size yerleşik en kullanabilir source
veya cd
veya kabuk seçeneği "globstar" geçerli olacak istemi bir emrinde olsun veya bir yer case
olmayan bir interaktif komut veya aynı komut bir işlevde açıklamada.
Yukarıdaki başka bir cevabın aksine zstyle
, "compsys" (tamamlama sistemi) modülüne özgü bir yerleşik değildir, zstyle
"global" bir yerleşiktir.
zstyle
zsh/util
modül tarafından tanımlanır , bu sadece nasıl ayrıştırılacağını tanımlayan kodun zstyle
ve zsh/zutil
modülde "do" nun tanımlandığı anlamına gelir .
Bu gerçeği de unutabilirsiniz, yani bash, eval
yerleşik kodun dosyada bulunduğunu bilmenizi gerektirmez eval.c
, ancak yardım almak için zstyle
, modülde zstyle
tanımlanan bir yerleşik olduğunu bilmenize yardımcı olur zsh/zutil
ve zsh/zutil
modülün belgelerine çalışarak erişilebilir man zshmodules
.
Bu nedenle, geleneksel olarak kabuk seçenekleri genellikle "global" olmuştur, ancak açıklamaya göre man zshmodules
, zsh'nin bazı isteğe bağlı parçaları modüllerde bulunmaktadır ve ayrıca zsh
kabuk işlevlerinde çok sayıda işlevsellik yazılmıştır. (vim'in çok sayıda temel ve isteğe bağlı işlevselliğinin vimscript'te nasıl yazıldığına benzer).
Öyleyse, yalnızca bu modüller veya işlevler için geçerli olan seçenekleri belirleyebilmek istiyorsanız, bunu nasıl yapardınız?
Peki bu zstyle
, geleneksel "küresel" kabuk seçeneklerinden çok daha iyi bir şekilde "hedefleme" yeteneği sunar.
zstyle
bunu argüman ile başarır"pattern"
"Compsys" e özgü bazı isteğe bağlı davranışları yapılandıran örnek bir komut:
zstyle ':completion::complete:lsof:*' menu yes select
ve "vcs_info" ya özgü bazı isteğe bağlı davranışları yapılandırma:
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 '
Ancak burada bitmiyor, zstyles
bağlamları hedefleme yeteneği inanılmaz derecede güçlü, örneğin, vcs_info
özellik için bazı davranışlar / seçenekler tanımlamak istediğinizi söyleyin , bir .git
depo olduğunuzda, bir depodan farklı olarak svn
, o zaman bağlam modeli
:vcs_info:<svn_or_whatever_SCM_system>:* <style>
Bir svn
repo ile belirli bir proje için isteğe bağlı davranışa ne dersiniz ? sonra
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
Bulduğum aptalca adlandırılmış ve kötü belgelenmiş "(z) stil" in tek belirsiz anlamlı açıklaması Bash'ten Z Kabuğuna ait sözlükten geliyor
style
İçinde
zsh
, stil mekanizması, tamamlama sistemi ve editör widget'ları gibi işlevleri kullanan kabuk eklentilerini yapılandırmanın esnek bir yoludur. Değişkenlerin aksine farklı bağlamlarda farklı olabilirler ve kabuk seçeneklerinden farklı olarak değer alabilirler. Mekanizma komut stiline dayanmaktadır.
ayrıca, "Stilleri İşleme" bölümünde , yazar daha ayrıntılı olarak ...
Daha karmaşık tamamlama işlevleriyle, işlevin davranışının bazı yönlerinin kullanarak yapılandırılabilir olmasına izin vermek isteyebilirsiniz
style
.... birçok yardımcı fonksiyon sizin için stilleri arar, böylece fonksiyonunuz özel bir şey yapmak zorunda kalmadan fonksiyonunuz birçok stile tepki verir. Belirli bir durumda aranan stiller hakkında fikir edinmek için, _complete_help işlevini sayısal bir bağımsız değişkenle çağırın. Normalde, önce tuşuna, Esc2ardından tuşuna basarak yapabilirsiniz Ctrl
-
x h. Bu, temel olarak tamamlama yapılandırılırken kullanışlıdır, çünkü hangi stillerin arandığını ve ilişkili bağlamı görmenizi sağlar.
ZSH ile ilgili en sinir bozucu şeylerden biri, man komutlarında çeşitli komutlarını nerede bulacağını bulmaktır. Bu durumda zstyle ile ilgili dokümanları çevrimiçi olarak man zshmodules
veya burada bulabilirsiniz .
Bu yerleşik komut stilleri tanımlamak ve aramak için kullanılır. Stiller, değerlerin herhangi bir sayıda dizeden oluştuğu ad ve değer çiftleridir. Desenlerle birlikte saklanırlar ve arama, desenlerle karşılaştırılan 'bağlam' adı verilen bir dize verilerek yapılır. İlk eşleşen desen için saklanan tanım döndürülür.
Zsh alanında iyi örneklerin çok büyük bir eksikliği var ve belgeler oldukça geniş. Prezto'nun zstyle'ı nasıl kullandığına, dokümanları okuduğum ve bazı şeyler denediğim için biraz zaman geçirdim . zstyle esas olarak tamamlamalarda kullanılıyor gibi görünüyor, ancak aslında verileri eski ortam değişkenlerinden daha karmaşık bir şekilde saklamak için gerçekten iyi.
Bu özette, bilgileri saklamak ve almak için zstyle'i nasıl kullanabileceğiniz gösterilmektedir:
# 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*'