什么 fish 函数控制文件名的完成,我该如何更改它?

What fish function controls completion of filenames, and how can I change it?

我正在尝试更改 fish 用于查找文件名补全的标准逻辑。特别是,我希望 fish 不要考虑任何以波浪号 (~) 字符结尾的文件名,因为这些是 emacs 备份文件,并不有趣。

我曾假设可能的完成列表将由 fish 函数提供,然后我可以编辑它以删除以波浪号结尾的那些。但是我找不到这个功能。我查看了 fishshell.com 的文档,我也尝试过 functions | grep complete。我应该编辑什么功能?

与大多数完成文件名不同,文件名完成不是作为函数实现的;它被嵌入到 C++ 代码中。请参阅 src/complete.cpp 中的 completer_t::complete_param_expand() 方法。如果您能就如何实施这种类型的定制提出有说服力的论据,我鼓励您 open an issue.

P.S., 请注意 functions 不会显示私有函数,除非您将其调用为 functions -a。我提到这一点是因为许多完成函数都通过以下划线开头的名称来标记为私有。