如何覆盖(装饰)内置的fish函数

时间:2019-02-11 06:46:58

标签: override autoload fish

我想让printf第9行上的/usr/share/fish/functions/__fish_move_last.fish保持沉默,因为我觉得这很烦人。

在不复制整个功能的情况下该怎么做?

如果仅将文件复制到~/.config/fish/functions/并注释第9行,则当原始功能在新版本中更新时,我可能会破坏事情。

我宁愿使用以下方式使函数静音:

functions -c __fish_move_last __fish_move_last_ORIG

function __fish_move_last
    __fish_move_last_ORIG $argv >/dev/null
end

但是,如果我将该代码段放在~/.config/fish/functions/__fish_move_last.fish中,则会出现此错误:

  

fish:无法自动加载项目'__fish_move_last',因为它已被自动加载。这是自动加载脚本中的循环依赖项,请删除它。

我尝试在文件的开头显式加载原始函数,以避免自动加载,但并没有使错误消失:

source /usr/share/fish/functions/__fish_move_last.fish

functions -c __fish_move_last __fish_move_last_ORIG

function __fish_move_last
    __fish_move_last_ORIG $argv >/dev/null
end

这里正确的方法是什么?

1 个答案:

答案 0 :(得分:2)

  

在不复制整个功能的情况下该怎么做?

你没有。

实际上,解决方案是复制整个功能。

  

当原始功能在新版本中更新时,我可能会破坏事情。

从理论上讲,这是可能的。但是,在这种情况下,对它的最后更改是

  • 重新格式化,于2016年11月

  • 在2016年7月将“ ...”更改为省略号(“…”)

  • 在201 0

  • 中删除尾随空格

所以我认为你很安全。

如果您仍然对此感到担心,还可以复制此功能以及所有依赖此功能的功能(我想是上一个还是下一个)。

或者您可以在上一个和下一个中使__fish_move_last的输出静音,或者使那些静音。

任何形式的覆盖函数的任意位似乎都容易出错,而不是更少。