이 가짜 질문에 대한 가짜 답변이 충분하지 않은 것 같습니다. 자동 마운트 디렉토리에 대한 zsh 내장 지원은 fake-files dir:names
파일 패턴이 아닌 디렉토리 ( )에서 작동합니다 . 이는 마운트 할 디렉토리가 알려진 정적 이름 인 NetApp 유형 설정에 적합 automount
하거나 디렉토리에 특정 이름 지정된 파일을 추가하는 데 편리합니다 .sshfs
.snapshot
ALAS
autoload -U compinit
compinit
zstyle ':completion:*' fake-files $HOME/.avfs:'ALAS POOR YORICK'
zshall(1)
"이름"은 문자열이며 실험 결과 메타 문자 (예 : #
또는 \#
또는 '*(e:"echo hi":)'
)가 다양한 방식으로 "작동하지 않음"을 나타내 므로 fake-files
명령문 의 이름 부분에 글 을 몰래 넣을 방법을 알 수 없습니다 . (디스플레이를 통해 Src/Zle/computil.c
이름이 정확히 무엇인지 알 수 있지만 더 효과가 있습니다.) (또한 디렉토리 위치에서 재귀 글로브를 사용하여 아카이브 파일 이름을 지정하지는 않았지만 C 다이빙을 fake-files
통해 얼마나 많은 양의 당신은 도망 치죠.)
을 사용 compdef
하면 .avfs
디렉토리 완성을 나열 할 수 있습니다 .
compdef '_files -g $HOME/.avfs/\*' -p \^
function andthehash {
reply=($REPLY $REPLY\#)
}
compdef "_files -g $HOME/.avfs/'*(+andthehash)'" -p \^
#
파일이 중요하지 않은 경우 에만 파일을 표시 하므로 완료 할 수 없으므로 실패 합니다. (이 경우는 아니지만이 양식의 생산적인 용도가 있습니다.)
를 사용 zstyle
하면 다음과 같이 더 가까이 갈 수 있습니다 .zshrc
.
autoload -U compinit
compinit
function UnderAVFS {
local pdir
[[ -z $1 ]] && return 1
pdir=$1:a
[[ ! -d $pdir ]] && pdir=$pdir:h
[[ ! -d $pdir || $pdir == . ]] && return 1
while [[ $pdir != / ]]; do
[[ $pdir == $HOME/.avfs ]] && return 0
pdir=$pdir:h
done
return 1
}
function AVFSExtras {
if UnderAVFS $REPLY; then
reply=($REPLY)
# TODO embiggen list of archive suffixes
[[ $REPLY == *.(bz2|tbz2) ]] && reply+=($REPLY\#)
fi
}
# Try to match avfs, otherwise the default pattern. Probably could greatly
# benefit from caching, to avoid hits on UnderAVFS function.
zstyle ':completion:*' file-patterns '*(+AVFSExtras):avfs-files' '%p:all-files'
그러나 최대 \#/
avfs 설정의 데비안 스퀴즈 virt 에서만 비트 를 완료 할 수 있지만 아카이브의 가상 파일 시스템에서는 완료 할 수 없으므로 아카이브를 완료하려면 추가 작업이 필요합니다. 존재하지 않는 디렉토리가 있다고 생각 하는 더 우아한 방법이 없다면, _call_program ... ls
그 줄을 따라 또는 그 줄을 따라 무언가를 \#
조금씩 추측 하고 zsh
있습니다.
나쁜 소식! 완성은 _path_files
가짜 디렉토리를 통과시키지 않습니다 . 이것이 zsh globbing과 관련이 있다고 생각합니다. zsh 4.something on 및 zsh 5.0.8 모두 문제가 있습니다. 따라서 완전한 수정에는 패치가 필요 _path_files
하거나 이러한 가짜 dirs에서 완료되는 다른 것을 작성 해야한다고 생각합니다 . 누군가가 이것이 왜 실패 하는지를 조사하기를 원한다면, ls /root/.avfs/root/sometar.gz\#/
그 입력의 끝에서 타자를 입력 control-x
하고 그 콤보에 묶여 ?
있다고 가정 bindkey -e
하고 완료 디버깅 추적을 생성 할 수 있습니다 _complete_debug
.