PATH를 무시하기 위해 "소스" 완성을 사용하는 방법

PATH를 무시하기 위해 "소스" 완성을 사용하는 방법

이에 대해 "충분히 자세한" 문서를 찾을 수 없으며 zstyle이전에 아무도 이 문제를 겪지 않았다는 사실에 놀랐습니다.

탭 완성 기능을 사용하면 다음과 같은 결과를 얻을 수 있습니다.

source l<TAB>
l2ping*                  lefty*                   libwmf-fontmap*          locate*                  lpq.cups

이것은 물론/분명히 내 것입니다 $PATH. 그러나 나는 을 source사용 하고 싶습니다.현지의파일을 변경하는 방법을 모르겠습니다.

기본적으로 이 명령은 file내가 기대하는 대로 수행되므로 zstyle동일한 규칙을 사용하라고 말하고 싶습니다.

추측하다나는 그것을 적용 :completion:*:killall:* 'ps -u $USER -o cmd h'하고 작업을 수행할 수 있지만 보기 흉할 것이므로 zstyle 내장 옵션을 찾고 있습니다.

아이디어비슷한 것을 적용할 수 있지만 ':completion:*:cd:*' ignore-parents parent pwd완성 source된 결과는 절대 바뀌지 않습니다.


정보:

$ zsh --version
zsh 4.3.17 (x86_64-redhat-linux-gnu)
$ zstyle
cache-path
        :completion::complete:* /home/kevin/.oh-my-zsh/cache/
command
        :completion:*:*:*:*:processes 'ps -u kevin -o pid,user,comm -w -w'
        :completion:*:killall:* 'ps -u $USER -o cmd h'
hosts
        :completion:*:hosts 192.168.0.101 git.bri.st.com crx672 bastion.inrialpes.fr 192.168.0.5 idrouille 129.88.69.73 idrouille.imag.fr koguis 192.168.1.4 127.0.0.1 koguis.imag.fr localhost crx672.cro.st.com 192.168.1.100 github.com 192.168.1.101 sourceware.org gnx2034.gnb.st.com gnx2528.gnb.st.com ctf.stri.pe 10.0.0.2 127.0.0.1 kevin localhost.localdomain localhost ::1 kevin localhost6.localdomain6 localhost6 kevin localhost
ignored-patterns
        :completion:*:*:*:users adm amanda apache avahi beaglidx bin cacti canna clamav daemon dbus distcache dovecot fax ftp games gdm gkrellmd gopher hacluster haldaemon halt hsqldb ident junkbust ldap lp mail mailman mailnull mldonkey mysql nagios named netdump news nfsnobody nobody nscd ntp nut nx openvpn operator pcap postfix postgres privoxy pulse pvm quagga radvd rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs
        :completion:*:functions '_*'
list-colors
        :completion:*:*:kill:*:processes '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01'
        :completion:* ''
menu
        :completion:*:*:*:*:* select
single-ignored
        * show
tag-order
        :completion:*:cd:* local-directories directory-stack path-directories
url-globbers
(eval)  :url-quote-magic 'zmodload -i zsh/parameter;
     reply=( noglob
         ${(k)galiases[(R)(* |)(noglob|urlglobber|globurl) *]:-}
         ${(k)aliases[(R)(* |)(noglob|urlglobber|globurl) *]:-} )'
url-local-schema
        :urlglobber ftp file
url-metas
        :url-quote-magic:* '*?[]^(|)~#{}='
url-other-schema
        :urlglobber http https ftp
url-seps
(eval)  :url-quote-magic:* 'reply=(";&<>${histchars[1]}")'
use-cache
        :completion::complete:* 1
user-commands
        :completion:*:*:git:* 'flow:description for foo'

답변1

zsh 4.3.10부터 이는 zstyle을 찾지 않고 source수행됩니다 . _source사용된 스타일을 설정하는 것이 가능할 수도 있지만 _files이는 zsh 표준에서도 해킹입니다.

_source원하는 대로 함수를 다시 작성하는 것이 좋습니다 . 너무 길지는 않습니다. 예를 들어:

_my_source () {
  if [[ CURRENT -ge 3 ]]; then
    compset -n 2
    _normal
  elif [[ $service = . ]]; then
      _files -W path
  else
    _files
  fi
}
compdef _my_source source

관련 정보