Terminal

zsh:自動修改執行的命令

  • October 12, 2016

我最近通過 MacPorts 在我的系統中安裝了 grc(通用著色器),使我能夠為大量預設情況下不支持它的命令獲取彩色輸出(見下面的螢幕截圖)。 帶有 traceroute 的 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

但是,它可能會導致諸如“for i (..)”、“var=x”、“f() {”之類的命令出現問題…

其他選擇。同類潛在問題:

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

我會為每個需要“grc”的命令使用“別名”,而不是試圖找出此處發布的解決方案的例外情況。

引用自:https://unix.stackexchange.com/questions/46447