自定义Zsh主题

一直在用zsh的主题ys。一直有一个很烦的问题,刚进入shell的时候最上面有一个空行看起来十分难受。
今天想起来解决了一下,发现并不困难。

zsh的主题就是一个shell文件,修改变量PROMT就好了,而ys这个主题ys.zsh-theme

1
2
3
4
5
6
7
8
9
10
11
12
PROMPT="
%{$terminfo[bold]$fg[blue]%}#%{$reset_color%} \
%(#,%{$bg[yellow]%}%{$fg[black]%}%n%{$reset_color%},%{$fg[cyan]%}%n) \
%{$fg[white]%}@ \
%{$fg[green]%}%m \
%{$fg[white]%}in \
%{$terminfo[bold]$fg[yellow]%}%~%{$reset_color%}\
${hg_info}\
${git_info}\
\
%{$fg[white]%}[%*] $exit_code
%{$terminfo[bold]$fg[red]%}$ %{$reset_color%}"

在开头的时候就加了一个换行,把他去掉命令之间又太紧凑了。而PROMT是一个变量,赋值是一次性的,在里面插一个带状态的函数又行不通。

好在文档里有一个函数precmd,接下来就很简单了,把这个插入到要修改的主题,再把PROMPT再把前面的换行删掉就好了。

1
2
3
4
5
6
7
8
local prompt_prefix_flag=false
function precmd(){
if $prompt_prefix_flag; then
echo ""
else
prompt_prefix_flag=true
fi
}