我怎样才能让“fish”枚举它正在读取配置的所有位置?

我怎样才能让“fish”枚举它正在读取配置的所有位置?

当我启动时fish,我希望它打印出读取配置、配置文件和自定义的每个位置,以便我可以:

  • 如果我想保留我的 shell 体验,了解我需要备份哪些特定路径,以及
  • 确定变量和颜色的设置位置

这可能吗?如果可能,怎么做?

答案1

我怎样才能要求fish枚举它正在读取配置的位置?

我不相信这是可能的。

如果我想保留我的 shell 体验,我需要备份哪些特定路径,

这些都列在文档,但最重要的可能是您自己的配置文件:

  • ~/.config/fish/config.fish
  • ~/.config/fish/completions
  • ~/.config/fish/functions

初始化文件

配置文件按以下顺序进行评估:

  • $__fish_data_dir/config.fish与 fish一起提供的配置,通常 不应被编辑/usr/share/fish/config.fish

  • .fish目录中以 结尾的文件中的配置片段:

    • $__fish_config_dir/conf.d(默认情况下,~/.config/fish/conf.d/

    • $__fish_sysconf_dir/conf.d(默认情况下,/etc/fish/conf.d/

    • 第三方软件供应商用于为他们的软件发送自己的配置片段的目录。 Fish 在XDG_DATA_DIRS环境变量的 fish/vendor_conf.d目录中搜索目录;如果未定义此变量,则默认通常搜索/usr/share/fish/vendor_conf.d/usr/local/share/fish/vendor_conf.d

      如果这些目录中有多个同名文件,则只执行第一个。它们按文件名的顺序执行,按自然顺序排序(如 globs)(即“01”排在“2”之前)。

  • 系统范围的配置文件,管理员可以在其中包含应对系统上所有用户运行的初始化 - 类似于/etc/profilePOSIX 风格的 shell - $__fish_sysconf_dir(通常/etc/fish/config.fish)。

  • 用户初始化,通常在~/.config/fish/config.fish(由环境变量控制XDG_CONFIG_HOME,并可作为 访问$__fish_config_dir)。

这些路径由构建、安装或运行时设置的参数控制,并且可能与上面列出的默认值不同。

这种大范围的搜索可能会让人困惑。如果您不确定将自己的自定义项放在哪里,请使用~/.config/fish/config.fish

请注意~/.config/fish/config.fish来源代码片段。这样,用户可以复制代码片段并覆盖他们的一些行为。

来源:简介 — fish-shell 3.1.2 文档

在哪里放置完成内容

补全可以在命令行或配置文件中定义,但也可以自动加载。 Fish 会自动搜索列表变量中的任何目录 $fish_complete_path,并在需要时自动加载定义的任何补全。 补全文件的文件名必须由要完成的命令的名称和后缀“ .fish”组成。

默认情况下,Fish 使用找到的第一个可用文件来搜索以下内容以完成:

  • 供最终用户保存他们自己的完成的目录,通常~/.config/fish/completions(由环境变量控制XDG_CONFIG_HOME );
  • 系统管理员为系统上的所有用户安装补全的目录,通常是/etc/fish/completions
  • 第三方软件供应商用来运送其软件的目录。Fish 在 XDG_DATA_DIRS环境变量中的fish/vendor_completions.d 目录中搜索目录;如果未定义此变量,则默认通常搜索/usr/share/fish/vendor_completions.d/usr/local/share/fish/vendor_completions.d
  • 完井装置随鱼一起运输,通常安装在/usr/share/fish/completions;和
  • 从操作系统手册自动生成的完成内容,通常存储在 中 ~/.local/share/fish/generated_completions

这些路径由构建、安装或运行时设置的参数控制,并且可能与上面列出的默认值不同。

这种广泛的搜索可能会让人困惑。如果你不确定,你的完成可能属于~/.config/fish/completions

来源:简介 — fish-shell 3.1.2 文档

自动加载函数

函数可以在命令行或配置文件中定义,但也可以自动加载。这有一些优点:

  • 自动加载的功能将自动供所有正在运行的 shell 使用。
  • 如果函数定义发生变化,所有正在运行的 shell 将自动重新加载改变后的版本。
  • 启动时间和内存使用率得到改善等等。

当 fish 需要加载一个函数时,它会在列表变量的所有目录中搜索$fish_function_path一个由函数名称加上后缀“ .fish”组成的文件,然后加载它找到的第一个文件。

默认$fish_function_path包含以下内容:

  • 供最终用户保存其自身功能的目录,通常~/.config/fish/functions(由环境变量控制XDG_CONFIG_HOME )。
  • 系统管理员为系统上的所有用户安装功能的目录,通常/etc/fish/functions(确实 $__fish_sysconfdir/functions)。
  • 第三方软件供应商为其软件提供自己的功能的目录。 Fish 在 XDG_DATA_DIRS环境变量的fish/vendor_functions.d 目录中搜索目录;如果未定义此变量,则默认通常搜索/usr/share/fish/vendor_functions.d/usr/local/share/fish/vendor_functions.d.
  • fish 自带的功能,通常安装在/usr/share/fish/functions(really $__fish_data_dir/functions) 中。

这些路径由构建、安装或运行时设置的参数控制,并且可能与上面列出的默认值不同。

这种广泛的搜索可能会让人困惑。如果你不确定,你的函数可能属于~/.config/fish/functions

来源:简介 — fish-shell 3.1.2 文档

如何确定变量和颜色的设置位置

查看上面列出的初始化文件。

答案2

您可以尝试以下几种方法。使用 fish 3.1.2。

  1. 在启动时设置调试级别。

https://fishshell.com/docs/current/cmds/fish.html

-d 或 --debug=CATEGORY_GLOB 启用调试输出并指定用于匹配调试类别的 glob(如 fish -d)。默认为空。

> fish -d 2
<2> fish: exec_path: '/usr/bin/fish', argv[0]: 'fish'
<2> fish: Using compiled in paths:
<2> fish: determine_config_directory_paths() results:
paths.data: /usr/share/fish
paths.sysconf: /etc/fish
paths.doc: /usr/share/doc/fish
paths.bin: /usr/bin
<2> fish: sourcing /usr/share/fish/config.fish
<2> fish: sourcing /etc/fish/config.fish
<2> fish: sourcing /home/x/.config/fish/config.fish
  1. fish_trace

https://fishshell.com/docs/current/index.html#special-variables

如果设置了 fish_trace并且不为空,将导致 fish 在执行命令之前打印命令,类似于 bash 中的 set -x。

这个命令对我很有帮助--

> fish_trace=1 fish -lic 'echo' &| grep "source /home"
++++ source /home/x/.config/fish/conf.d/fzf.fish
+ source /home/x/.config/fish/config.fish
+++++++ source /home/x/.config/fish/functions/bass.fish
...

这将启动一个新的 fish 实例,它既是登录又是交互式 shell,并且 grep 仅显示你的主目录中正在查找的内容。

  1. 要确定变量和颜色的设置位置,请使用set -S|--show

https://fishshell.com/docs/current/cmds/set.html#description

-S 或 --show 显示有关给定变量的信息。如果没有给出变量名,则所有变量将按排序顺序显示。此选项不能与任何其他标志一起使用。显示的信息包括它是否在每个本地、全局和通用范围内设置。如果它在其中一个范围内设置,则报告它是否被导出。还会显示各个元素以及每个元素的长度。

> set -S
...
$fish_color_cancel: not set in local scope
$fish_color_cancel: not set in global scope
$fish_color_cancel: set in universal scope, unexported, with 1 elements
$fish_color_cancel[1]: length=2 value=|-r|
...

相关内容