Zsh:実行されたコマンドを自動的に変更


9

最近、MacPortsを介してgrc(汎用カラーライザー)をシステムにインストールしました。これにより、デフォルトではサポートしていない多くのコマンドのカラー出力を取得できます(下のスクリーンショットを参照)。 tracerouteを使用したgrcの例。
grcを自動的に使用したいのですが、特定のコマンドではなく、すべてのコマンドに対して使用します。シェルとしてzshを使用しています。

基本的に、実行するときは常にcommand -parameter 1 2 3として自動的に実行されるようにしたいと思いgrc command -parameter 1 2 3ます。grcに色を付けるためのコマンドをどんどん追加しているので、
エイリアス、たとえばtraceroutealias to を使用するつもりはありませんgrc traceroute

.zshrcのpreexecおよびprecmd構成を調べましたが、探しているものを実現する方法が見つかりませんでした。

回答:


6

accept-lineウィジェットを再定義することでそれを行うことができます:

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

ただし、「for i(..)」、「var = x」、「f(){」などのコマンドでは問題が発生する可能性があります...


いい視点ね。私はこの解決策が私自身を作成する可能性がある問題を考えることができませんでしたが、あなたはこれのために正しいです。お時間をいただきありがとうございます。
2012

この方法の1つの欠点はgrc、すべてのコマンドの開始時に履歴が表示されることです。
joeytwiddle 2015

6

その他の代替案。同じ種類の潜在的な問題:

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

ここに投稿されたソリューションの例外を理解しようとする代わりに、「grc」を必要とするすべてのコマンドに「エイリアス」を使用します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.