我最近通过 MacPorts 将 grc(通用着色器)安装到我的系统中,这使我能够为默认情况下不支持的大量命令获取彩色输出(请参见下面的屏幕截图)。

我想让 grc 自动使用,但不是针对特定命令,而是针对每个命令。我使用 zsh 作为我的外壳。
基本上,每当我执行时,command -parameter 1 2 3我都希望它自动执行为grc command -parameter 1 2 3.
我不打算使用别名,例如traceroutealias to grc traceroute,因为我正在为 grc 添加越来越多的命令以进行着色。
我已经研究了 .zshrc 的 preexec 和 precmd 配置,但我还没有找到一种方法来实现我正在寻找的东西。
您可以通过重新定义接受行小部件来实现:
add-grc() { [[ $BUFFER = grc* ]] || BUFFER="grc $BUFFER"; zle .$WIDGET "$@"; }
zle -N accept-line add-grc
Run Code Online (Sandbox Code Playgroud)
但是,它可能会导致诸如“for i (..)”、“var=x”、“f() {”...
其他选择。同样的潜在问题:
TRAPDEBUG() { eval "grc $ZSH_DEBUG_CMD"; setopt errexit; }
Run Code Online (Sandbox Code Playgroud)
我会为每个需要“grc”的命令使用“别名”,而不是试图找出此处发布的解决方案的例外情况。