Zsh:自动修改执行的命令

Zsh:自动修改执行的命令

我最近通过 MacPorts 在我的系统中安装了 grc(通用着色器),使我能够为默认情况下不支持它的大量命令获取彩色输出(请参见下面的屏幕截图)。 grc 与traceroute 的示例。
我想让 grc 自动使用,但不是针对特定命令,而是针对每个命令。我使用 zsh 作为我的 shell。

本质上,每当我执行时,command -parameter 1 2 3我都希望它自动执行为grc command -parameter 1 2 3.
我不想使用别名,例如traceroutealias to grc traceroute,因为我正在添加越来越多的命令让 grc 着色。

我已经研究了 .zshrc 的 preexec 和 precmd 配置,但我还没有找到实现我正在寻找的东西的方法。

答案1

您可以通过重新定义接受行小部件来做到这一点:

add-grc() { [[ $BUFFER = grc* ]] || BUFFER="grc $BUFFER"; zle .$WIDGET "$@"; }
zle -N accept-line add-grc

但是,它可能会导致“for i (..)”、“var=x”、“f() {”...等命令出现问题。

答案2

其他替代方案。同类潜在问题:

TRAPDEBUG() { eval "grc $ZSH_DEBUG_CMD"; setopt errexit; }

我会为每个需要“grc”的命令使用“别名”,而不是试图找出此处发布的解决方案的例外情况。

答案3

考虑使用grc.zsh其中的一部分grc可以找到这里。它具有所有支持的命令的别名。
看到这个堆栈溢出答案

相关内容