답변:
zstyle
완성 시스템에 대한 명백한 스타일 제어를 처리하지만 그 이상을 다루는 것 같습니다. 예를 들어, vcs_info
모듈은 프롬프트에서 자식 상태를 표시하기 위해 모듈에 의존합니다. 당신의 몇 가지 설명 단락을보고 시작할 수 있습니다 man zshmodules
의 zstyle
섹션을 참조하십시오.
어떤 설정이 적용되는지 확인하기 위해 간단히 호출 할 수 있습니다. 이것은 유익 할 수 있습니다.
zsh을 예약 에 좋은 장 치료가 zstyle
다양한 분야 상세히 설명도를.
.../Completion/
시스템 의 디렉토리에서 grep 하여 해당 파일 중 일부가 어떻게 사용되는지 확인할 수 있습니다 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는 기본 내장 명령이 "core"모듈에 정의되어 있지만 다른 내장 명령은 "modules"에 포함되어있는 PHP와 같은 인터프리터와 비슷합니다.
좋아, 그럼 "zstyle"은 무엇인가?
다른 쉘과 마찬가지로 zsh는 다음과 같은 내장 명령을 가지고 있습니다 source
. cd
또는 declare
- zstyle
는 이러한 "내장"중 또 하나입니다.
내장 및 쉘 옵션은 일반적으로 쉘 프로세스 전체에서 언제 어디서나 일반적으로 적용 가능 / 사용 가능하다는 의미에서 "전역 적"입니다. 즉, 일반적으로 zsh 및 모든 하위 시스템에 적용됩니다. (모듈). 이것은 쉘이 대화식 또는 비 대화식 인터프리터로 호출되는지 여부에 적용됩니다.
예를 들어, 내장 source
또는 cd
쉘 옵션 인 "globstar"를 사용하면 명령 프롬프트 또는 case
비 대화식 스크립트 의 명령문 또는 동일한 스크립트의 함수에서 유효합니다 .
위의 다른 대답과 달리 zstyle
"compsys"(완료 시스템) 모듈에만 해당되는 내장 기능 zstyle
이 아니라 "글로벌"내장 기능입니다.
zstyle
는 zsh/util
모듈에 의해 정의되며 , 이는 단순히 구문 분석 방법을 정의하는 코드와 모듈 zstyle
에 "do" 가 정의 됨을 의미합니다 zsh/zutil
.
bash는 eval
내장 코드 가 파일에 포함되어 있음을 알 필요 는 eval.c
없지만 도움을 받으려면 모듈에 정의 된 내장 코드 zstyle
를 아는 데 도움이됩니다. 모듈 설명서는 다음 을 실행하여 액세스 할 수 있습니다 . zstyle
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
리포지토리 와 함께 특정 프로젝트에 대한 선택적 동작은 어떻습니까? 그때
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
내가 찾은 어리석게 명명되고 잘못 문서화 된 "(z) 스타일"에 대한 모호한 의미있는 유일한 설명은 Bash에서 Z Shell까지 의 용어집에서 비롯됩니다.
style
에서
zsh
, 스타일 메커니즘은 완성 시스템과 편집기 위젯으로 그 사용 기능, 뛰기 쉘 애드온을 구성하는 유연한 방법입니다. 변수와 달리 변수는 상황에 따라 다를 수 있으며 셸 옵션과 달리 값을 사용할 수 있습니다. 메커니즘은 명령 스타일을 기반으로합니다.
또한 "핸들링 스타일"섹션 에서 저자는 더 자세히 설명합니다 ...
보다 복잡한 완료 기능을 사용하면을 사용하여 기능 동작의 측면을 구성 할 수 있습니다
style
.... 많은 도우미 함수가 스타일을 검색하므로 함수가 특별히 수행하지 않아도 여러 스타일에 반응합니다. 특정 상황에서 조회 된 스타일에 대한 아이디어를 얻으려면 숫자 인수를 사용하여 _complete_help 함수를 호출하십시오. 일반적으로을 누른 Esc2다음을 눌러이를 수행 할 수 있습니다 Ctrl
-
x h. 어떤 스타일이 조회되고 관련 컨텍스트가 있는지 확인할 수 있으므로 완료를 구성 할 때 주로 유용합니다.
ZSH에서 가장 실망스러운 점 중 하나는 매뉴얼 페이지에서 다양한 명령을 찾을 수있는 위치를 찾는 것입니다. 이 경우 zstyle 설명서는 온라인man zshmodules
또는 여기 에서 찾을 수 있습니다 .
이 내장 명령은 스타일을 정의하고 조회하는 데 사용됩니다. 스타일은 이름과 값의 쌍으로, 값은 여러 개의 문자열로 구성됩니다. 패턴과 함께 저장되며 패턴과 비교되는 '컨텍스트'라는 문자열을 제공하여 조회를 수행합니다. 첫 번째 일치 패턴에 저장된 정의가 리턴됩니다.
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*'