自定义oh-my-zsh主题风格,代码和语法的解释
摘要:简要介绍.zsh-theme的代码(不涉及函数)
关键词:ohmyzsh
zsh-theme语法
https://github.com/ohmyzsh/ohmyzsh/wiki/Themes 官方的主题库
我们可以在~/.oh-my-zsh/themes
下面找到对应的主题代码,和官方的主题风格对照着看
https://zsh.sourceforge.io/Intro/intro_14.html#SEC14 部分提示词语法
一、语法介绍
下面解释一下robbyrussell.zsh-theme
这个主题的代码
PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ ) %{$fg[cyan]%}%c%{$reset_color%}"
PROMPT+=' $(git_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"
PROMPT=""
:这是主提示符的设置。它定义了一个包含颜色和文本的字符串,用于显示在终端的最前面,表示当前工作目录和git的分支和仓库状态。具体解释如下:
%{$fg_bold[green]%}
:这是一个 Zsh 中的提示符替换序列,用于将后面的文本显示为绿色,并加粗。%c
:这是一个提示符替换序列,用于显示当前所在的目录路径。%{$fg[cyan]%}
:后面的文本显示为青色。%{$reset_color%}
:后面的文本颜色恢复为默认颜色,这个很重要,不设置的话可能会导致意想不到的颜色出现,比如使用Tab补全的时候出现了半截绿色
- 但其实我是用
%f
这个命令替换%{$reset_color%}
才解决了半截绿色的问题,不知道为什么
PROMPT+=' $(git_prompt_info)'
:在上面的主提示符后面添加一个命令替换,用于调用函数 git_prompt_info
并将其输出添加到提示符中。这个函数用于获取当前 Git 仓库的状态信息。后面的4个变量就服务于这个函数,也可以定义其他函数,如ruby_prompt_info
等。
ZSH_THEME_GIT_PROMPT_PREFIX=""
:这是一个 Git 仓库状态前缀的设置,用于显示在 Git 仓库状态信息前面。
ZSH_THEME_GIT_PROMPT_SUFFIX=""
:这是一个 Git 仓库状态后缀的设置。
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
:这是一个 Git 仓库状态为 “Dirty”(未提交修改)时的设置。它添加蓝色右括号)
,然后添加黄色的✗
符号,表示有未提交的修改。
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"
:这是一个 Git 仓库状态为 “Clean”(没有未提交的修改)时的设置,添加蓝色的右括号。
这两个变量只会打印其中之一,也就是当有未提交的修改时会打印
ZSH_THEME_GIT_PROMPT_DIRTY
的值,否则打印ZSH_THEME_GIT_PROMPT_CLEAN
二、转义字符
注意有些前缀是%
,有些是$
系统信息
%n
- username
%m
- short name of the current host
%M
- name of curent host
%#
- a %
or a #
, depending on whether the shell is running as root or not
%~
- relative path
%/
or %d - absolute path
%c
or %C
- Trailing component of the current working directory.
%t
- time 12hr am/pm format
%T
- time 24hr format
%w
- day and date (day-dd)
%D
- Date (default: yy-mm-dd)
%D{%f}
- day of the month
%l
or %y
- The line (tty) the user is logged in on, without /dev/
prefix.
颜色
%F{237}
256 color number
%F{red}
8 color name (black, red, green, yellow, blue, magenta, cyan, white)
$FG[237]
(notice the $
sign instead of %
) 256 color number
$fg[red]
(notice the $
and lower case fg
) 8 color name (black, red, green, yellow, blue, magenta, cyan, white)
%{$fg_bold[blue]%}
bold variants
%F
is Foreground color, $f
for resetting foreground color
%K
is bacKground color, %k
for resetting background-color
$reset_color
is a Zsh variable that resets the color of the output
You can use Unicode for symbols
%E
Clear to end of the line.
%U
(%u
) to Start (stop) underline mode.
高级
%{...%}
来表示提示符替换序列。这些序列允许在提示符中插入颜色、样式和其他特殊文本,以实现个性化的终端显示。例如 %{$fg[red]%}
表示将后面的文本显示为红色。
%(condition.true-text.false-text)
来进行条件判断,并在满足条件时显示 true-text
,不满足条件时显示 false-text
。
%?
来获取上一个命令的退出状态码,并根据退出状态码进行条件判断。例如 %{$fg_bold[red]%}%(?..[%?])
可以在上一个命令返回非零状态码时显示状态码,否则不显示。
%F{code}
和 %f
来设置异步命令的前景色。可以使用它们来在命令执行期间改变命令输出的颜色。
$underline
表示下划线文本
$blink
表示闪烁文本
%#
可以显示当前 Zsh 会话中已执行的命令数。
%B%>
可以显示一个右提示符,通常用于辅助显示长命令或多行命令输入。
%B%{...%}
来添加颜色和样式到自动补全提示符。
%h
显示当前历史命令
%!
可以显示最近执行的历史命令。
%d
表示目录堆栈的深度,这对于有多个目录切换的情况下很有用。
%{%}
表示宽度适应,当终端窗口变窄时,可以隐藏长路径等。
\\
表示插入逃逸字符,从而显示特殊字符,例如 $
、%
等,这个逃逸字符我试了但没有效果
$(date)
表示插入当前日期。
$variable_name
表示变量。例如 $PROMPT
表示一个保存主提示符的变量。
\n
表示换行
\t
表示制表符(Tab)