2012-02-13 184 views
5

我想更改zsh中输入文本的颜色(我为每个命令键入的文本)。例如:在[email protected]> ls ~/我希望ls ~/为黄色以从标准输出中脱颖而出。zsh更改提示输入颜色

我知道可以使用

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

在提示结束时的bash实现这一点,颜色设置为黄色,输入文本I型是黄色(与所定义的适当的颜色变量)。然后

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

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

我该如何做到这一点zsh?目前,我有

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

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

回答

3

试试这个:

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

我试着用trap,但它看起来像DEBUG不前的提示下发生,直到命令运行后/,因此命令结束了黄色执行。在执行命令之前调用preexec()函数,因此您可以在那里恢复默认颜色。

+1

这正是我想要的!谢谢。你介意解释这是如何工作的吗?另外需要注意的是,它在自动完成期间会自动完成颜色回复(例如'ls somepath [tab]'),至少对于我的设置(我认为zsh在自动完成期间插入了无色的斜线),但这是一个非常小的投诉。 – 2012-11-30 06:51:13

+1

原始字符串中有一个拼写错误('#F'而不是'%F'),但这也不是问题。我只是注意到,自动完成后,我遇到了和自己颜色相同的问题。 'prexec()'在从shell执行的每个命令之前被调用,这是如何工作来重置颜色的。原来你应该用'%f'标记关闭所有'%F'颜色变化以恢复原始颜色。如果我找出更好的解决方案,我会更新答案。 – 2012-11-30 17:24:11