Bash zsh更改提示输入颜色

Bash zsh更改提示输入颜色,bash,terminal,zsh,zshrc,Bash,Terminal,Zsh,Zshrc,我想更改zsh中输入文本的颜色(我为每个命令键入的文本)。示例:在user@host>ls~/我希望ls~/为黄色,以便从标准输出中脱颖而出。 我知道我可以在bash中使用 export PS1=" $BIGreen \u@\h \w \$ $IYellow" 提示结束时,颜色设置为黄色,输入文本I type为黄色(定义了相应的颜色变量)。然后 trap 'echo -ne "\e[0m"' DEBUG 当显示“我的命令”的输出时,将颜色重置为正常 如何在zsh中实现这一点?目前,我有 P

我想更改zsh中输入文本的颜色(我为每个命令键入的文本)。示例:在
user@host>ls~/
我希望
ls~/
为黄色,以便从标准输出中脱颖而出。

我知道我可以在bash中使用

export PS1=" $BIGreen \u@\h \w \$ $IYellow" 
提示结束时,颜色设置为黄色,输入文本I type为黄色(定义了相应的颜色变量)。然后

trap 'echo -ne "\e[0m"' DEBUG
当显示“我的命令”的输出时,将颜色重置为正常

如何在zsh中实现这一点?目前,我有

PROMPT=$'{$fg[green]%}%n@%{$fg[green]%}%m %# %{$fg[yellow]%}'
在.zshrc中(在末尾将颜色设置为黄色),但它不起作用。(我也不知道如何在命令后将颜色设置回白色)。

尝试以下操作:

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

我尝试使用了
trap
,但看起来
DEBUG
直到命令运行后/下一个提示符前才发生,因此命令最终以黄色执行。
preexec()
函数在命令执行之前被调用,因此您可以在那里恢复默认颜色。

这正是我想要的!谢谢你能解释一下这是怎么回事吗?还有一点需要注意的是,在自动完成过程中颜色会恢复(例如,
ls somepath[tab]
),至少在我的设置中是这样(我认为zsh在自动完成过程中插入了一个不带颜色的斜杠),但这是一个很小的问题。原始字符串中有一个打字错误(
\F
而不是
%F
),但这也不是问题所在。我只是注意到我和你一样,在自动完成后,颜色会发生变化<代码>prexec()在从shell执行每个命令之前被调用,这就是重置颜色的工作方式。原来您应该使用
%F
标记来关闭所有
%F
颜色更改,以恢复原始颜色。如果我找到更好的解决方案,我会更新答案。