(これはzsh 5.7.1がインストールされているMacOSにあります)
zshからカスタム関数をロードする方法は次のとおりです。
# Custom functions
fpath=($HOME/.zfunc $fpath)
autoload -Uz mackupbackup
autoload -Uz tac
autoload -Uz airplane
autoload -Uz wakeMyDesktop
各関数は~/.zfunc
ディレクトリ内の独自のファイルです。その後、このディレクトリは他のディレクトリにシンボリックリンクされていますmackup
。
現在、コミットハッシュをクリップボードにコピーする新しい関数を作成しました。 $ fpathというファイルを作成しghash
、関数を作成し、autoload
myに新しい行を追加して.zshrc
実行しましたsource ~/.zshrc
。
これは機能です
# copy the commit hash of the given git reference, or HEAD if none is given
ref=$1
if [[ $ref ]]; then
git rev-parse $1 | pbcopy
else
git rev-parse HEAD | pbcopy
fi
購入後に.zshrc
機能が利用可能になって動作しますが、動作確認を印刷するために次の行を追加したいと思います。
echo "Copied $(pbpaste) to clipboard"
だから、その行を追加し、ファイルを保存して.zshrc
再インポートしました。
関数を再実行しましたが、動作は変わりませんでした!
私が何か間違っているようで、機能を変え続けてソーシングを変更しましたが、.zshrc
役に立ちませんでした。全体的に.zshrc
リソースを22回再インポートしましたが、その時点で作業を完了するのに37秒かかりました。
その後、関数を再ロードするのではない可能性があることに気づき、zsh
start新しいインスタンスを実行し(約1秒かかり)、関数が期待どおりに機能し始めました!
source
新しい機能を選択したが機能が変更された後に更新されなかった理由を知っている人はいますか?
source ~/.zshrc
ボーナスの質問:実行するたびに時間がかかるのはなぜですか?
答え1
実際、人々が冪等になるようにファイルを作成することはほとんどないので、rcファイルをインポートすることはほとんどありません。一般的な例は、毎回同じディレクトリをパスの前に追加するユーザーの場合ですfpath
。これは、もちろん、そのルートを検索するのに時間が長くかかることを意味します。そして間違いなく、ここがこの種のことをすることができる唯一の場所ではありません。
また、自動ロードを正しく理解していません。ドキュメントに示すように、本文を持たない関数は自動的にロードされます。その機能が初めて実行されたとき。明らかに、関数がすでにロードされており、関数本体がある場合は再ロードされません。
関数を再度呼び出す前に、その関数を呼び出す必要がありますunfunction
。autoload
.zshrc
Zシェルソースの例freload()
引数の後に、名前付きのすべての関数に対してこれを実行する関数が含まれています。typeset -U path cdpath fpath manpath
はい。
答え2
autoload
aはzshでname
最初の参照時に自動的にロードされるとマークされていますが、名前がすでに定義されている場合は名前が定義された後にすでに参照されるため、同じ名前の既存の関数はオーバーライドされません。必要なものを得るには、.zshrc
関数を再ソーシングする前に定義を解放する必要があります。または、より簡単にするには、自動ロード用のラッパー関数を作成して、指定された関数名が定義されていることを確認し、その場合はタグに自動的にロードされます。定義を解除する前にもう一度確認してください。
試すたびに購入が遅くなる理由には.zshrc
答えられません.zshrc
。