2012-02-13 5 views
5

Я хочу изменить цвет текста ввода в zsh (текст, который я набираю для каждой команды). Пример: в [email protected]> ls ~/ Я бы хотел, чтобы ls ~/был желтым, чтобы выделяться из стандартного выхода.zsh change prompt input цвет

Я знаю, что может сделать это в Баше с помощью

export PS1=" $BIGreen \[email protected]\h \w \$ $IYellow" 

В конце подсказки, цвет устанавливается в желтый цвет, тип ввод текста я желтый (с соответствующим цветовым переменными, определенным). А затем

trap 'echo -ne "\e[0m"' DEBUG 

Сбрасывает цвет в нормальное состояние при отображении выходов моей команды.

Как это сделать в zsh? В настоящее время у меня есть

PROMPT=$'{$fg[green]%}%[email protected]%{$fg[green]%}%m %# %{$fg[yellow]%}' 

в .zshrc (установка цвет на желтый в конце), но он не работает. (Я также не знаю, как вернуть цвет в белый цвет после команды).

ответ

3

Попробуйте это:

PROMPT="%F{green}%[email protected]%m %# %F{yellow}" 
preexec() { echo -ne "\e[0m" } 

Я попытался с помощью trap, но это выглядит как DEBUG не происходит до тех пор, после выполнения команды/до следующей строки, так что команда заканчивает выполнение в желтом цвете. Функция preexec() вызывается до выполнения команды, поэтому вы можете восстановить цвет по умолчанию.

+1

Это именно то, что я хотел! Благодарю. Не могли бы вы объяснить, как это работает? Кроме того, один из предостережений заключается в том, что цвет возвращается во время автозаполнения (например, 'ls somepath [tab]'), по крайней мере для моих настроек (я думаю, zsh вставляет неокрашенную косую черту во время автозаполнения), но это очень незначительная жалоба. –

+1

В исходной строке была опечатка ('# F' вместо'% F'), но это тоже не проблема. Я только заметил, что у меня такая же проблема, как и с изменением цвета после автозаполнения. 'prexec()' вызывается перед каждой командой, выполняемой из оболочки, что и работает, чтобы сбросить цвет. Оказывается, вы должны закрыть все цветовые изменения '% F' с помощью тега'% f', чтобы восстановить исходный цвет. Если я придумаю лучшее решение, я обновлю ответ. –

Смежные вопросы