偽の答えは、この偽の質問には不十分なようです。自動マウントディレクトリのzshビルトインサポートは、ディレクトリ(fake-files dir:names
)で動作し、その中のファイルパターンでは動作しません。これは合うかもしれディレクトリに特定の名前のファイルを追加すると便利ですautomount
かsshfs
またはNetAppの.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セットアップを使用したdebian squeeze virtで)少しだけ完了することができますが、アーカイブの仮想ファイルシステムでは完了できないため、アーカイブをタブで完了するには追加の作業が必要になります。存在しないディレクトリがそうであると信じるよりエレガントな方法がない限り_call_program ... ls
、私は経由でまたはそれらの線に沿った何かを補完するために\#
少し推測してzsh
います。
悪いニュース!完了しても_path_files
、偽のディレクトリには到達しません。これはzshのグロビングに関連していると思われます。zsh 4.something onとzsh 5.0.8の両方で問題が発生します。ですから、完全な修正には、へのパッチが必要_path_files
か、そうでなければこれらの偽のディレクトリで完了する別の何かを書く必要があると思います。誰かがこれが失敗する理由を掘り下げたい場合は、ls /root/.avfs/root/sometar.gz\#/
入力してcontrol-x
、その入力の最後に入力し、次に?
、bindkey -e
その_complete_debug
キーコンボにバインドされていると仮定して、完了デバッグトレースを生成できます。