Fish shell 输出文本着色的自定义函数

Fish shell custom function for output text coloring

当在终端仿真器(如终结器)中使用 fish shell 以及输出大量文本的命令时,在输出上获得一些颜色编码可能很有用。我知道脚本可以将颜色代码信息添加到输出,如“grep --color=auto”。我想可以修改 fish 终端以扫描输出并将其添加到特殊位置吗?

我想要做的是任何脚本输出中出现的文本 "error" 始终标记为红色,而 "warning" 始终标记为黄色。任何人都知道这是否可以通过在 ~/.config/fish/functions 目录或类似目录中引入函数文件来实现?

这基本上是一种分层违规行为。通常外部命令的输出不会通过shell返回。它直接进入终端。

此外,您在这里所做的任何事情都有可能减慢输出速度。 (而且由于鱼的问题 #1396,这可能相当极端)。

就是说,如果您总是通过管道传递给这样的函数,那是有可能的

function colorstuff
    while read -l input
        switch $input
            case "*error*"
                set_color red
                echo $input
            case "*warning*"
                set_color yellow
                echo $input
            case "*"
                set_color normal
                echo $input
        end
    end
    set_color normal
end

somecommand | colorstuff一样使用它。 (如果你也希望 stderr 有颜色,可以添加 ^&1

在我的测试中,这会导致明显的速度下降,即使解决了这个问题,它仍然会变慢,因为它必须匹配每一行。

真的,真正的解决方案是使用任何工具来给自己上色,因为它知道输出 的意思。所有这些都可以做的就是寻找关键字。

为了一般的输出着色需求,我将 grc 插件添加到 Tackle 正是为了这个目的。