zsh:相対パス全体を絶対パスとして使用しますか?

zsh:相対パス全体を絶対パスとして使用しますか?

引数が絶対パスでなければならないコマンドの完成関数を作成しようとしています。 (いいえ、理由はわかりません。)相手パスを入力できればと思いますが、完了すると絶対パスに拡張されます。これにより、絶対パスの要件を忘れた場合は、完了によって問題が解決されます。私。たとえば、私の作業ディレクトリがhomeで、「foo」ファイルがあり、と入力すると、その代わりfo<TAB>に完了します。/usr/me/foofoo_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 "$@";
}

~/これは、(絶対パスなど)で始まるパス識別や変数を使用して表示されるパスなど、多くの一般的なケースに適用されます。拡張(ワイルドカードなど)と埋め込みとの可能なすべての相互作用は考慮されていません。

関連情報