zsh更改提示输入颜色

She*_* Yu 7 bash terminal zsh zshrc

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

我知道我可以用bash来完成这个

export PS1=" $BIGreen \u@\h \w \$ $IYellow" 
Run Code Online (Sandbox Code Playgroud)

在提示结束时,颜色设置为黄色,输入文本I类型为黄色(定义了适当的颜色变量).然后

trap 'echo -ne "\e[0m"' DEBUG
Run Code Online (Sandbox Code Playgroud)

当显示我的命令输出时,会将颜色重置为正常.

我怎样才能在zsh中实现这一目标?目前,我有

PROMPT=$'{$fg[green]%}%n@%{$fg[green]%}%m %# %{$fg[yellow]%}'
Run Code Online (Sandbox Code Playgroud)

在.zshrc中(最后将颜色设置为黄色)但它不起作用.(我也不知道如何在命令后将颜色设置回白色).

Jim*_*art 6

试试这个:

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

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

  • 这正是我想要的!谢谢。您介意解释一下这是如何工作的吗?另外,需要注意的是,它的颜色在自动完成过程中会恢复(例如“ls somepath[tab]”),至少对于我的设置而言(我认为 zsh 在自动完成过程中插入了无色斜杠),但这是一个非常小的抱怨。 (2认同)
  • 原始字符串中有一个拼写错误(“#F”而不是“%F”),但这也不是问题。我刚刚注意到我遇到了与您相同的问题,即自动完成后颜色发生变化。在从 shell 执行每个命令之前都会调用 prexec() ,这就是重置颜色的方式。结果你应该用“%f”标签关闭所有“%F”颜色变化以恢复原始颜色。如果我找到更好的解决方案,我会更新答案。 (2认同)