Zsh: автоматически изменять выполненную команду


9

Я недавно установил grc (универсальный colorizer) в свою систему через MacPorts, что дает мне возможность получать цветной вывод для множества команд, которые по умолчанию не поддерживают его (см. Скриншот ниже). Пример grc с traceroute.
Я хотел бы сделать использование grc автоматически, но не для конкретных команд, а для каждой команды. Я использую Zsh в качестве оболочки.

По сути, всякий раз, когда я выполняю, command -parameter 1 2 3я бы хотел, чтобы он автоматически выполнялся как grc command -parameter 1 2 3.
Я не собираюсь использовать псевдонимы, например, tracerouteпсевдоним для grc traceroute, поскольку я добавляю все больше и больше команд для grc для раскрашивания.

Я изучил конфигурации preexec и precmd для .zshrc, но я не нашел способа добиться того, что я ищу.

Ответы:


6

Вы можете сделать это, переопределив виджет accept-line:

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» вместо того, чтобы пытаться выяснить исключения для решений, размещенных здесь.


3

Рассмотрите возможность использования grc.zshэтой части, grcкоторую можно найти здесь . У него есть псевдонимы для всех поддерживаемых команд.
Смотрите этот ответ Stackoverflow

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.