`zstyle`은 무엇을합니까?


23

zstyleexport-ing 쉘 매개 변수 의 대안과 같이 데이터를 저장하고 검색하는 중앙 위치 인 것처럼 보입니다 . 그게 사실입니까, 아니면 더 있습니까?


6
두 가지 이유로 q를 상향 조정했습니다. a) Google은 어쨌든 나를 여기로 보냅니다. b)는 zstyle는 것 같습니다 많은 "스타일"또는 자동 완성과는 아무 상관이없는 것으로 보인다 그것을 위해 가고 있습니다. 여기에 대한 답변 중 하나는 기능의 이름이 어떻게되는지에 대한 의견까지 포함합니다.
zaTricky

답변:


19

zstyle완성 시스템에 대한 명백한 스타일 제어를 처리하지만 그 이상을 다루는 것 같습니다. 예를 들어, vcs_info모듈은 프롬프트에서 자식 상태를 표시하기 위해 모듈에 의존합니다. 당신의 몇 가지 설명 단락을보고 시작할 수 있습니다 man zshmoduleszstyle섹션을 참조하십시오.

어떤 설정이 적용되는지 확인하기 위해 간단히 호출 할 수 있습니다. 이것은 유익 할 수 있습니다.

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»하면 몇 가지 옵션이 표시됩니다. 다음 콜론으로 탭 완성하면 다음 옵션 세트 등이 표시됩니다.


2
Zsh 책에 대한 링크와 Completion 디렉토리에 대한 팁을 가져 주셔서 감사합니다. Zsh 매뉴얼은 기능이
풍부

"... 기능은 무겁고 사용 사례와 예제는 매우 가볍습니다"-불행히도 프로그래머가 작성한 대부분의 자료의 경우입니다.
aaaaaa

9

zstyle작동 방식 을 제대로 이해하려면 먼저 zsh가 모듈 식 프로그램임을 이해해야합니다. 에서man zshmodules

zsh의 일부 선택적 부분은 쉘의 코어와 별도로 모듈에 있습니다. 이러한 각 모듈은 빌드시 셸에 연결되거나 설치가이 기능을 지원하는 경우 셸이 실행되는 동안 동적으로 연결될 수 있습니다. [...]

이와 관련하여 zsh는 기본 내장 명령이 "core"모듈에 정의되어 있지만 다른 내장 명령은 "modules"에 포함되어있는 PHP와 같은 인터프리터와 비슷합니다.
좋아, 그럼 "zstyle"은 무엇인가?
다른 쉘과 마찬가지로 zsh는 다음과 같은 내장 명령을 가지고 있습니다 source. cd또는 declare- zstyle는 이러한 "내장"중 또 하나입니다.

내장 및 쉘 옵션의 범위

내장 및 쉘 옵션은 일반적으로 쉘 프로세스 전체에서 언제 어디서나 일반적으로 적용 가능 / 사용 가능하다는 의미에서 "전역 적"입니다. 즉, 일반적으로 zsh 및 모든 하위 시스템에 적용됩니다. (모듈). 이것은 쉘이 대화식 또는 비 대화식 인터프리터로 호출되는지 여부에 적용됩니다.
예를 들어, 내장 source또는 cd쉘 옵션 인 "globstar"를 사용하면 명령 프롬프트 또는 case비 대화식 스크립트 의 명령문 또는 동일한 스크립트의 함수에서 유효합니다 .
위의 다른 대답과 달리 zstyle"compsys"(완료 시스템) 모듈에만 해당되는 내장 기능 zstyle이 아니라 "글로벌"내장 기능입니다.

zstylezsh/util모듈에 의해 정의되며 , 이는 단순히 구문 분석 방법을 정의하는 코드와 모듈 zstyle에 "do" 가 정의 됨을 의미합니다 zsh/zutil.
bash는 eval내장 코드 가 파일에 포함되어 있음을 알 필요 는 eval.c없지만 도움을 받으려면 모듈에 정의 된 내장 코드 zstyle를 아는 데 도움이됩니다. 모듈 설명서는 다음 을 실행하여 액세스 할 수 있습니다 . zstylezsh/zutilzsh/zutilman 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>

8

내가 찾은 어리석게 명명되고 잘못 문서화 된 "(z) 스타일"에 대한 모호한 의미있는 유일한 설명은 Bash에서 Z Shell까지 의 용어집에서 비롯됩니다.

style

에서 zsh, 스타일 메커니즘은 완성 시스템과 편집기 위젯으로 그 사용 기능, 뛰기 쉘 애드온을 구성하는 유연한 방법입니다. 변수와 달리 변수는 상황에 따라 다를 수 있으며 셸 옵션과 달리 값을 사용할 수 있습니다. 메커니즘은 명령 스타일을 기반으로합니다.

또한 "핸들링 스타일"섹션 에서 저자는 더 자세히 설명합니다 ...

보다 복잡한 완료 기능을 사용하면을 사용하여 기능 동작의 측면을 구성 할 수 있습니다 style.

... 많은 도우미 함수가 스타일을 검색하므로 함수가 특별히 수행하지 않아도 여러 스타일에 반응합니다. 특정 상황에서 조회 된 스타일에 대한 아이디어를 얻으려면 숫자 인수를 사용하여 _complete_help 함수를 호출하십시오. 일반적으로을 누른 Esc2다음을 눌러이를 수행 할 수 있습니다 Ctrl-x h. 어떤 스타일이 조회되고 관련 컨텍스트가 있는지 확인할 수 있으므로 완료를 구성 할 때 주로 유용합니다.


2

ZSH에서 가장 실망스러운 점 중 하나는 매뉴얼 페이지에서 다양한 명령을 찾을 수있는 위치를 찾는 것입니다. 이 경우 zstyle 설명서는 온라인man zshmodules 또는 여기 에서 찾을 수 있습니다 .

이 내장 명령은 스타일을 정의하고 조회하는 데 사용됩니다. 스타일은 이름과 값의 쌍으로, 값은 여러 개의 문자열로 구성됩니다. 패턴과 함께 저장되며 패턴과 비교되는 '컨텍스트'라는 문자열을 제공하여 조회를 수행합니다. 첫 번째 일치 패턴에 저장된 정의가 리턴됩니다.


이것은 문서에 연결되어 있기 때문에 가장 좋은 대답입니다. zstyle에서 읽는 방법을 배우기 위해 필요했습니다. 다른 답변은 설정 스타일 만 처리합니다.
cbarrick

1

zsh 공간에는 좋은 예제가 매우 부족하며 문서가 불분명합니다. Preztozstyle을 사용 하는 방법을 살펴 보고 문서 를 읽고 몇 가지를 시도 하는 데 시간을 보냈습니다 . 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*'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.