zstyle
Sepertinya itu hanya tempat sentral untuk menyimpan dan mengambil data, seperti alternatif untuk export
parameter shell. Apakah itu benar, atau ada yang lebih dari itu?
zstyle
Sepertinya itu hanya tempat sentral untuk menyimpan dan mengambil data, seperti alternatif untuk export
parameter shell. Apakah itu benar, atau ada yang lebih dari itu?
Jawaban:
zstyle
menangani kontrol gaya yang jelas untuk sistem penyelesaian, tetapi tampaknya mencakup lebih dari itu. Misalnya, vcs_info
modul bergantung padanya untuk menampilkan status git di prompt Anda. Anda dapat mulai dengan melihat beberapa paragraf penjelasan di man zshmodules
dalam zstyle
bagian ini.
Anda cukup memohonnya untuk melihat pengaturan apa yang sedang berlaku. Ini bisa menjadi pelajaran.
The Zsh Buku memiliki perawatan bab bagus di zstyle
, juga, menjelaskan secara rinci berbagai bidang nya.
Anda dapat .../Completion/
melihat-lihat di direktori pada sistem Anda untuk melihat bagaimana beberapa file tersebut digunakan zstyle
. Lokasi umum dekat /usr/share/zsh/functions/Completion/*
. Saya melihatnya digunakan dalam 100+ file di sistem saya di sana. Pengguna sering zstyle
menaburkan di sekitar mereka ~/.zshrc
juga. Berikut adalah beberapa yang bagus untuk menambahkan beberapa warna dan deskripsi ke dalam penyelesaian Anda:
# 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'
# ...
Sistem penyelesaian membuat sebagian besar bidang jelas jika Anda bermain dengannya. Coba ketikkan zstyle :«tab»
dan Anda melihat beberapa opsi. Tab-lengkapi ke titik dua berikutnya dan Anda akan melihat set opsi berikutnya, dll.
Untuk memahami cara zstyle
kerjanya, Anda harus terlebih dahulu memahami bahwa zsh adalah program modular. Dariman zshmodules
Beberapa bagian opsional zsh ada dalam modul, terpisah dari inti shell. Masing-masing modul ini dapat dihubungkan ke shell pada waktu build, atau dapat dihubungkan secara dinamis ketika shell sedang berjalan jika instalasi mendukung fitur ini. [...]
Dalam hal ini zsh lebih seperti seorang juru bahasa seperti PHP di mana perintah-perintah bawaan utama didefinisikan dalam modul "inti", tetapi perintah-perintah bawaan lainnya terkandung dalam "modul-modul".
Ok bagus, jadi apa itu "zstyle"?
zsh, seperti shell lain memiliki perintah builtin, seperti source
, cd
atau declare
- zstyle
hanyalah salah satu dari "builtin" ini.
opsi builtin dan shell biasanya "global" dalam arti bahwa mereka umumnya (tetapi tidak selalu) dapat digunakan / digunakan setiap saat atau konteks sepanjang proses shell, atau dengan kata lain, mereka umumnya berlaku untuk zsh dan semua sub-sistem (modul). Perhatikan ini berlaku apakah shell dipanggil sebagai interpreter interaktif atau non-interaktif.
Jadi, misalnya Anda dapat menggunakan opsi builtin source
atau cd
atau shell "globstar" akan valid baik pada prompt perintah atau dalam case
pernyataan dalam skrip non-interaktif atau dalam fungsi dalam skrip yang sama.
Bertentangan dengan jawaban lain di atas, zstyle
bukan builtin yang khusus untuk modul "compsys" (sistem penyelesaian), zstyle
adalah builtin "global".
zstyle
didefinisikan oleh zsh/util
modul, ini hanya berarti bahwa kode yang mendefinisikan cara mengurai, dan "lakukan" zstyle
didefinisikan dalam zsh/zutil
modul.
Anda bisa saja melupakan fakta ini, yaitu bash tidak mengharuskan Anda untuk mengetahui bahwa kode untuk eval
builtin terkandung dalam file eval.c
, tetapi untuk mendapatkan bantuan zstyle
, perlu diketahui bahwa itu zstyle
adalah builtin yang ditentukan dalam zsh/zutil
modul, dan dokumentasi untuk zsh/zutil
modul dapat diakses dengan menjalankan man zshmodules
.
Jadi secara tradisional opsi shell umumnya bersifat "global", tetapi sesuai deskripsi dari man zshmodules
, Beberapa bagian opsional zsh ada dalam modul , dan juga, banyak zsh
fungsi yang ditulis dalam fungsi shell. (Mirip dengan bagaimana banyak fungsi inti dan opsional vim telah ditulis dalam vimscript).
Jadi jika Anda ingin dapat menentukan opsi yang hanya berlaku untuk modul atau fungsi ini, bagaimana Anda melakukannya?
Nah itulah yang zstyle
terjadi, memberi Anda kemampuan untuk "menargetkan" opsi pada tingkat yang jauh lebih baik daripada opsi shell "global" tradisional.
zstyle
mencapai ini melalui argumen"pattern"
Contoh perintah yang mengonfigurasi beberapa perilaku opsional khusus untuk "compsys":
zstyle ':completion::complete:lsof:*' menu yes select
dan mengonfigurasi beberapa perilaku opsional khusus untuk "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 '
Tapi itu tidak berhenti di situ, zstyles
kemampuan untuk menargetkan konteks sangat kuat, misalnya, katakan Anda ingin mendefinisikan beberapa perilaku / opsi untuk vcs_info
fitur, ketika Anda adalah .git
repositori, bukan svn
repo, maka Anda dapat memodifikasi pola konteks
:vcs_info:<svn_or_whatever_SCM_system>:* <style>
Bagaimana dengan perilaku opsional untuk proyek tertentu, dengan svn
repo? kemudian
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
Satu-satunya deskripsi yang samar-samar bermakna dari gaya "(z) yang disebutkan bodoh, dan tidak terdokumentasi" yang saya temukan - berasal dari glosarium From Bash To The Z Shell
style
Dalam
zsh
, mekanisme gaya adalah cara yang fleksibel untuk mengkonfigurasi add-on shell yang menggunakan fungsi, seperti sistem penyelesaian dan widget editor. Tidak seperti variabel, mereka dapat berbeda dalam konteks yang berbeda dan tidak seperti opsi shell, mereka dapat mengambil nilai. Mekanisme ini didasarkan pada gaya perintah.
juga, di bagian "Gaya Penanganan", penulis selanjutnya menguraikan ...
Dengan fungsi penyelesaian yang lebih canggih, Anda mungkin ingin memungkinkan aspek perilaku fungsi dapat dikonfigurasi menggunakan
style
.... banyak fungsi pembantu mencari gaya untuk Anda sehingga fungsi Anda akan bereaksi terhadap banyak gaya tanpa fungsi Anda harus melakukan apa pun secara khusus. Untuk mendapatkan gambaran tentang gaya yang dicari dalam situasi tertentu, aktifkan fungsi _complete_help dengan argumen numerik. Biasanya, Anda bisa melakukan ini dengan menekan Esc2diikuti oleh Ctrl
-
x h. Ini terutama berguna ketika mengkonfigurasi penyelesaian karena memungkinkan Anda untuk melihat gaya apa yang dicari dan konteks terkait.
Salah satu hal yang paling membuat frustrasi tentang ZSH adalah mencari tahu di mana menemukan berbagai perintahnya di halaman manual. Dalam hal ini, dokumentasi untuk zstyle dapat ditemukan di man zshmodules
atau di sini online .
Perintah bawaan ini digunakan untuk mendefinisikan dan mencari gaya. Gaya adalah pasangan nama dan nilai, di mana nilainya terdiri dari sejumlah string. Mereka disimpan bersama dengan pola dan pencarian dilakukan dengan memberikan string, yang disebut 'konteks', yang dibandingkan dengan pola. Definisi yang disimpan untuk pola pencocokan pertama akan dikembalikan.
Ada sangat sedikit contoh yang baik di ruang zsh, dan dokumentasinya tumpul. Saya meluangkan waktu untuk melihat bagaimana Prezto menggunakan zstyle, serta membaca dokumen dan mencoba beberapa hal. zstyle tampaknya terutama digunakan dalam penyelesaian, tetapi sebenarnya sangat bagus untuk menyimpan data dengan cara yang lebih canggih daripada variabel lingkungan biasa.
Intisari ini menunjukkan bagaimana Anda dapat menggunakan zstyle untuk menyimpan dan mengambil informasi:
# 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*'