Zsh:自动修改执行的命令


9

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

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

我已经研究了.zshrc的preexec和precmd配置,但是我还没有找到实现所需功能的方法。

Answers:


6

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

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

但是,这可能会导致诸如“ for i(..)”,“ var = x”,“ f(){” ...之类的命令出现问题。


好点子。我想不出这个解决方案会给自己带来什么问题,但是您代表这个观点是正确的。感谢您的时间。
尼特

这种方法的一个缺点是历史记录将显示grc在每个命令的开头。
joeytwiddle

6

其他选择。同类潜在问题:

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

对于需要“ grc”的每个命令,我都会使用“别名”,而不是尝试为此处发布的解决方案找出异常。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.