zstyle
ดูเหมือนว่ามันเป็นเพียงศูนย์กลางในการจัดเก็บและดึงข้อมูลเช่นทางเลือกในการexport
เชลล์พารามิเตอร์ มันเป็นเรื่องจริงหรือมีมากกว่านั้น?
zstyle
ดูเหมือนว่ามันเป็นเพียงศูนย์กลางในการจัดเก็บและดึงข้อมูลเช่นทางเลือกในการexport
เชลล์พารามิเตอร์ มันเป็นเรื่องจริงหรือมีมากกว่านั้น?
คำตอบ:
zstyle
จัดการกับการควบคุมสไตล์ที่ชัดเจนสำหรับระบบที่เสร็จสมบูรณ์ แต่ดูเหมือนจะครอบคลุมมากกว่านั้น เช่นvcs_info
โมดูลอาศัยเพื่อแสดงสถานะ git ในการแจ้งของคุณ คุณสามารถเริ่มต้นโดยดูที่วรรคอธิบายไม่กี่แห่งในman zshmodules
ในzstyle
ส่วน
คุณสามารถเรียกใช้เพื่อดูการตั้งค่าที่มีผล นี้สามารถให้คำแนะนำ
zsh หนังสือมีการรักษาที่ดีบทzstyle
ยังอธิบายในรายละเอียดด้านต่างๆของ
คุณสามารถ grep ไปรอบ ๆ ใน.../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 ที่คำสั่ง builtin หลักถูกกำหนดไว้ในโมดูล "คอร์" แต่คำสั่ง builtin อื่น ๆ ที่มีอยู่ใน "โมดูล"
เยี่ยมมากแล้ว "zstyle" คืออะไร?
zsh เช่นเปลือกหอยอื่น ๆ ที่มีในตัวคำสั่งเช่นsource
, cd
หรือdeclare
- zstyle
เป็นเพียงหนึ่งในเหล่านี้ "builtins" อีก
builtins และตัวเลือกเชลล์มักจะ "ทั่วโลก" ในแง่ที่ว่าโดยทั่วไป (แต่ไม่เสมอไป) ใช้ได้ / ใช้งานได้ตลอดเวลาหรือบริบทตลอดกระบวนการเชลล์หรือในคำอื่น ๆ พวกเขามักใช้กับ zsh และระบบย่อยทั้งหมด (โมดูล) หมายเหตุสิ่งนี้ใช้ว่าเชลล์ถูกเรียกใช้ในฐานะล่ามแบบโต้ตอบหรือไม่โต้ตอบ
ตัวอย่างเช่นคุณสามารถใช้ builtin source
หรือcd
หรือตัวเลือกเชลล์ "globstar" จะถูกต้องไม่ว่าจะเป็นคำสั่งที่พร้อมรับคำสั่งหรือในcase
คำสั่งในสคริปต์ที่ไม่โต้ตอบหรือในฟังก์ชันในสคริปต์เดียวกันนั้น
ตรงกันข้ามกับคำตอบอื่น ๆ ข้างต้นzstyle
ไม่ใช่บิวอินที่เฉพาะเจาะจงกับโมดูล "compsys" (ระบบความสมบูรณ์) zstyle
คือบิวอิน"ทั่วโลก"
zstyle
ถูกกำหนดโดยzsh/util
โมดูลนี่ก็หมายความว่ารหัสที่กำหนดวิธีการแยกวิเคราะห์และ "ทำ" zstyle
ถูกกำหนดในzsh/zutil
โมดูล
คุณอาจลืมความจริงนี้ได้เช่น bash ไม่ต้องการให้คุณรู้ว่าโค้ดสำหรับeval
builtin มีอยู่ในไฟล์eval.c
แต่เพื่อขอความช่วยเหลือzstyle
จะช่วยให้ทราบว่าzstyle
เป็น builtin ที่กำหนดไว้ใน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
repo คุณสามารถแก้ไข รูปแบบบริบท
:vcs_info:<svn_or_whatever_SCM_system>:* <style>
สิ่งที่เกี่ยวกับพฤติกรรมที่ไม่จำเป็นสำหรับโครงการที่เฉพาะเจาะจงด้วยsvn
repo? แล้วก็
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
คำอธิบายที่มีความหมายอย่างชัดเจนเพียงอย่างเดียวของชื่อที่โง่เขลาและเอกสารที่ไม่ดี "(z)" ที่ฉันได้พบ - มาจากอภิธานศัพท์ของFrom Bash To The Z Shell
style
ใน
zsh
กลไกรูปแบบเป็นวิธีที่ยืดหยุ่นในการกำหนดค่าส่วนเสริมของเชลล์ที่ใช้ฟังก์ชั่นเช่นระบบเสร็จและวิดเจ็ตตัวแก้ไข แตกต่างจากตัวแปรพวกเขาสามารถแตกต่างกันในบริบทที่แตกต่างกันและแตกต่างจากตัวเลือกเชลล์พวกเขาสามารถใช้ค่า กลไกจะขึ้นอยู่กับรูปแบบคำสั่ง
นอกจากนี้ในส่วน "การจัดการรูปแบบ" ผู้แต่งยังอธิบายเพิ่มเติม ...
ด้วยฟังก์ชันการทำให้สมบูรณ์ที่ซับซ้อนมากขึ้นคุณอาจต้องการอนุญาตให้ใช้คุณลักษณะต่างๆของฟังก์ชันที่สามารถกำหนดค่า
style
ได้... ฟังก์ชั่นตัวช่วยมากมายค้นหาสไตล์ให้คุณดังนั้นฟังก์ชั่นของคุณจะตอบสนองต่อสไตล์ต่างๆโดยที่ฟังก์ชั่นของคุณไม่ต้องทำอะไรเป็นพิเศษ หากต้องการทราบแนวคิดของสไตล์ที่ค้นหาในบางสถานการณ์ให้เรียกใช้ฟังก์ชัน _complete_help ด้วยอาร์กิวเมนต์ตัวเลข ปกติคุณสามารถทำเช่นนี้ได้โดยการกดตามด้วยEsc2 Ctrl
-
x hสิ่งนี้มีประโยชน์หลักเมื่อกำหนดค่าการทำให้เสร็จสมบูรณ์เพราะช่วยให้คุณเห็นลักษณะที่ค้นหาและบริบทที่เกี่ยวข้อง
หนึ่งในสิ่งที่น่าหงุดหงิดที่สุดเกี่ยวกับ ZSH คือการหาว่าจะหาคำสั่งต่าง ๆ ได้ที่ไหนในหน้า man ในกรณีนี้เอกสารzstyleสามารถพบได้ในman zshmodules
หรือนี่ออนไลน์
คำสั่ง builtin นี้ใช้เพื่อกำหนดและค้นหาสไตล์ ลักษณะคือคู่ของชื่อและค่าที่ค่าประกอบด้วยสตริงจำนวนเท่าใดก็ได้ พวกเขาจะถูกเก็บไว้พร้อมกับรูปแบบและการค้นหาจะทำโดยให้สตริงที่เรียกว่า 'บริบท' ซึ่งเปรียบเทียบกับรูปแบบ คำจำกัดความที่เก็บไว้สำหรับรูปแบบการจับคู่แรกจะถูกส่งคืน
มีการขาดตัวอย่างที่ดีในพื้นที่ 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*'