Linux
如何在單個腳本中添加多個魚功能?
我正在嘗試從 zsh 轉向釣魚。正如我所見,如果我使用alias ,魚的載入時間會增加。所以我想把我所有的別名都轉換成函式,但是為每個別名創建一個函式腳本有點忙。那麼如何在單個函式腳本中添加這些別名呢?
基於荒謬_fish的這個Stack Overflow 範例,我建議使用其中定義的函式創建一個文件,然後在文件中添加一行來獲取該文件。
~/.config/fish/``~/.config/fish/config.fish
的範例內容
~/.config/fish/all-my-functions.fish
:function example-function1 ls -l $argv end function example-function2 ls -a $argv end # continues as needed ...
和行
~/.config/fish/config.fish
:source ~/.config/fish/all-my-functions.fish
或者,您可以將所有函式直接定義到 config.fish 文件中。
首先,
alias
Fish 中的命令只是創建帶有一點語法糖的函式的快捷方式。例如> alias ls "ls -lh" > functions ls # Defined via `source` function ls --description 'alias ls ls -lh' command ls -lh $argv; end
也許是正在創建/載入的函式的成本導致您的速度變慢。在這種情況下,將它們全部放入一個在啟動時(仍然)載入的單一文件可能不會有幫助。
有幾個簡單的解決方案甚至不涉及修改您的
config.fish
:
- 對於每個別名,只需
funcsave <aliasname>
. 這會將函式保存到~/.config/fish/functions
. 恕我直言,這確實是正確的方法,因為該目錄中的函式是按需載入的,而不是在啟動時載入。這將為您提供最快的 shell 啟動時間。例如:
> alias ls "ls -lh" > funcsave ls > ls -n ~/.config/fish/functions/ -rw-r--r-- 1 1000 100 95 Aug 18 14:30 ls.fish
同樣,這個文件在啟動時甚至沒有被觸及——它在需要時“延遲載入”。當您
ls
在會話中第一次呼叫時,Fish 將ls
執行~/.config/fish/functions/ls.fish
.此外,只需要
funcsave
在現有別名上。定義新別名時,只需使用alias -s
. 中自動創建延遲載入函式文件即可~/.config/fish/functions
。
- 編輯/更新:您提到希望這盡可能簡單,所以這裡有一個快速命令行,可以自動保存所有別名函式。執行後,您應該會看到其中每個別名的相應文件,
~/.config/fish/functions
並且您可以從啟動中刪除現有別名。for f in (alias | awk '{print $2}'); funcsave $f; end
- 如果你真的想為你的別名函式創建一個整體文件,並且你不介意增加的啟動時間(不管它是多少),那麼我仍然不會修改
~/.config/fish/config.fish
. 只需在其中創建該文件,~/.config/fish/conf.d
它將作為啟動的一部分自動讀取。每當某些說明說要修改您的
config.fish
. 時,請考慮改用文件conf.d
。它使您可以更輕鬆地查看(和修改)啟動配置的每個部分正在做什麼,而無需通過單個config.fish
.