Zsh: Автоматично змінювати виконану команду


9

Нещодавно я встановив grc (загальний колоризатор) у свою систему через MacPorts, що дає мені можливість отримати кольоровий вихід для безлічі команд, які за замовчуванням не підтримують його (див. Скріншот нижче). Приклад grc з traceroute.
Я хотів би зробити grc автоматичним, однак не для конкретних команд, а для кожної команди. Я використовую zsh як свою оболонку.

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

Я розглядав конфігурації preexec та precmd для .zshrc, але не знайшов способу досягти того, що шукаю.

Відповіді:


6

Ви можете зробити це, переглянувши віджет прийняття рядка:

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

Однак це може спричинити проблеми для команд типу "для 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.