代码之家  ›  专栏  ›  技术社区  ›  Tobia

如何重写(装饰)内置fish函数

  •  0
  • Tobia  · 技术社区  · 7 年前

    我想让 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 ,我得到这个错误:

    鱼:无法自动加载项目“鱼最后移动”,它已被自动加载。这是自动加载脚本中的循环依赖项,请将其删除。

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

    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 回复  |  直到 7 年前
        1
  •  2
  •   faho    7 年前

    在不复制整个函数的情况下,如何做到这一点?

    你没有。

    实际上,解决方案是复制整个函数。

    当原始函数在新版本中更新时,我可能会破坏它。

    理论上,这是可能的。然而,在这种特殊情况下,对它的最后更改是

    • 改版,2016年11月

    • 2016年7月将“…”改为省略号

    • 删除201中的尾随空格 零

    所以我觉得你很安全。

    如果您仍然担心这个问题,您还可以复制这个函数以及依赖它的所有内容(我假设是prevd和nextd)。

    或者你可以沉默 __fish_move_last 在prevd和nextd中输出,或静音 那些 .

    任何形式的重写任意位的函数看起来 更多 容易出错,但不是更少。

    推荐文章