如何找到定义fish函数的文件?

War*_*zee 2 fish

摆弄fish_vi_key_bindings,我很想知道这个函数是在哪里定义的。我的直觉是函数存在于 之外的文件中定义~/.config/fish/functions,但我看不到它们。

我如何知道该函数是在哪里定义的?就像是

function funcfile the-func -d 'show the file for a function'
    ...
end
Run Code Online (Sandbox Code Playgroud)

fah*_*aho 5

从 Fish 2.6.0 开始,functions内置有一个“--details”选项,可以显示以下内容:functions --details fish_vi_key_bindings

在此之前,您只需搜索$fish_function_path第一个匹配项即可。例如,使用 GNU grep:

grep --files-with-matches "function fish_vi_key_bindings" $fish_function_path/*.fish
Run Code Online (Sandbox Code Playgroud)

我的直觉是函数存在于 ~/.config/fish/functions 之外的文件中定义,但我看不到它们。

你的想法是正确的。您可能想到的是 $fish_function_path。这是一个包含 Fish 搜索函数的目录的列表,在第一个匹配处停止。

  • 此外,从同一版本开始,“type”命令会提供该信息:“$ type Fish_vi_key_bindings | head`: `fish_vi_key_bindings 是一个具有定义的函数 # 在 /usr/local/share/fish/functions/fish_vi_key_bindings.fish @ line 1 functionfish_vi_key_bindings --description 'vi-like key bindings for Fish' if contains -- -h $argv` (2认同)