2017-09-26 74 views
1

我想從命令行和腳本中定義一些可供使用的函數。一種方法是創建一個文件的每一個功能,並將其存儲在autoloading folder(例如~/config/fish/functions/one.fish~/config/fish/functions/two.fish,...)如何維護單個文件中的魚類功能集合?

但我不希望維持它自己的文件中的每個功能。有沒有什麼辦法可以在一個文件中定義一組函數(例如可以從命令行和多個腳本中引用它們)?我們希望看到它。)

(或者,魚是由強大的設計原則引導的。如果有文檔記載的魚被設計爲這種方式來存儲每個用戶定義函數的一個文件,我想看看它。)

回答

3

您可以在單個文件中只包含多個函數,但是您只能對其中的一個使用自動加載。

問題是這樣的:如果你在一個文件中有一個函數「foo」和一個函數「bar」,魚應該如何知道,而不是先讀取文件?

對於自動加載,該文件以函數命名(例如「bar」將存儲在「bar.fish」中),以便魚可以找出它的位置。

所以,你可以做兩件事情之一:

  • 如果其中一項功能總是先叫,那麼你可以使用它作爲文件名,並將其存儲在一個函數文件。使用該功能之後,魚知道其餘的(因爲它是文件source)。

  • 如果情況並非如此(或者您不想依賴它),您可以在需要時手動輸入source文件(或者在啓動時隻手動一次)或將其存儲在配置代碼段中在〜/ .config/fish/conf.d/SOMETHING.fish中(在讀取config.fish之前,它會自動將source)。

前者意味着例如輔助函數可以與主函數一起存儲。後者在不使用該函數的情況下加載文件時速度會稍慢一點,但除非您過度使用,否則您甚至不會注意到。

+1

我基本上使用後一種策略。我有我的配置克隆到幾臺機器的git。在我的config.fish中,我有'source config.fish。(hostname)',我可以爲每個盒子配置不同的函數,fish_user_path等。 –