Zstyle ne yapıyor?


23

zstyleveri exportkabuk 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ı?


6
Q 'yu iki nedenden ötürü oyladı; a) Google beni yine de buraya gönderiyor; b) zstyle bir var gibi görünüyor çok "tarzı" ya da otomatik tamamlama ile ilgisi var gibi görünüyor bu gidiş. Buradaki cevaplardan biri, özelliğin nasıl adlandırıldığına dair yorumlar bile.
zaTricky

Yanıtlar:


19

zstyletamamlama sistemi için bariz stil kontrolünü ele alır, ancak bundan daha fazlasını kapsamaktadır. Örneğin, vcs_infomodül isteminizde git durumunun görüntülenmesi için ona güvenir. Sen birkaç açıklayıcı paragraflar bakarak başlayabilirsiniz man zshmodulesiçinde zstylebö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 zstylekendi 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.


2
Zsh kitabının bağlantısı ve Tamamlama dizini hakkındaki ipucu için teşekkür ederiz. Zsh kılavuzu işlevsellik açısından ağırdır ve kullanım örnekleri ve örnekler üzerinde çok hafiftir
shadowtalker

"... işlevsellik üzerinde ağır ve kullanım vakaları ve örnekler üzerinde çok hafif" - ne yazık ki programcılar tarafından yazılmış çoğu malzeme için durum.
aaaaaa

9

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, cdya da declare- zstylebu "yerleşiklerin" sadece bir diğeri.

Yerleşiklerin kapsamı ve kabuk seçenekleri

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 sourceveya cdveya kabuk seçeneği "globstar" geçerli olacak istemi bir emrinde olsun veya bir yer caseolmayan 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.

zstylezsh/utilmodül tarafından tanımlanır , bu sadece nasıl ayrıştırılacağını tanımlayan kodun zstyleve zsh/zutilmodülde "do" nun tanımlandığı anlamına gelir .
Bu gerçeği de unutabilirsiniz, yani bash, evalyerleşik kodun dosyada bulunduğunu bilmenizi gerektirmez eval.c, ancak yardım almak için zstyle, modülde zstyletanımlanan bir yerleşik olduğunu bilmenize yardımcı olur zsh/zutilve zsh/zutilmodülün belgelerine çalışarak erişilebilir man zshmodules.

Bir modüle veya kabuk işlevine özgü ayar seçenekleri

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 zshkabuk 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.
zstylebunu 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, zstylesbağ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 .gitdepo olduğunuzda, bir depodan farklı olarak svn, o zaman bağlam modeli

:vcs_info:<svn_or_whatever_SCM_system>:* <style>

Bir svnrepo 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>

8

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.


2

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 zshmodulesveya 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.


Bu en iyi yanıttır çünkü belgelere bağlanır. Zstyle'dan nasıl okunacağını öğrenmek için buna ihtiyacım vardı. Diğer cevaplar sadece adres ayar stillerini cevaplar.
cbarrick

1

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*'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.