引数が絶対パスでなければならないコマンドの完成関数を作成しようとしています。 (いいえ、理由はわかりません。)相手パスを入力できればと思いますが、完了すると絶対パスに拡張されます。これにより、絶対パスの要件を忘れた場合は、完了によって問題が解決されます。私。たとえば、私の作業ディレクトリがhomeで、「foo」ファイルがあり、と入力すると、その代わりfo<TAB>
に完了します。/usr/me/foo
foo
_files
問題はどうするか分からないということです。_files
上記と上記のすべての標識を見てみましたが、compadd
関連性があるようではありません。 _canonical_paths
近くに見えますが、何もできません。パラメータが絶対パスの場合、_files
問題はこの最初のステップで発生します。提案?
答え1
次の関数は、ファイルの一般的な完成関数$PWD/
であるに渡す前に相対パスに追加します。_files
_absolute_files () {
local expansion=$PREFIX$SUFFIX; expansion=${(e)expansion}
if [[ "${expansion%%/#}" != "${expansion:a}" ]]; then
PREFIX="\$PWD/$PREFIX"
fi
_files "$@";
}
~/
これは、(絶対パスなど)で始まるパス識別や変数を使用して表示されるパスなど、多くの一般的なケースに適用されます。拡張(ワイルドカードなど)と埋め込みとの可能なすべての相互作用は考慮されていません。