配置 Zsh 终端:Prompt 命令提示符
目录
本文介绍了在 macOS Terminal 终端中如何配置 zsh Prompt 命令提示符。
基本格式
Prompt 命令提示符的基本格式为:
|
|
以 % 接单个字符为一个基本参数,输出特定信息。其中
%n:显示登录用户名。%m:显示当前主机名,登录本地终端时显示本机名,登录远程服务器时显示服务器名。%~:显示以~开头的当前工作目录,其中~为用户主目录$HOME,数字指定显示路径的层数。%#:当用户拥有管理员权限(root)时显示#,否则显示%。
上述参数也可以在 Terminal 终端中使用 print -P 命令输出查看。
配置文件
在 Terminal 中直接为 PROMPT 环境变量赋值,可临时改变提示符格式。重启 Terminal 窗口或打开一个新的 Terminal 窗口,仍会启用系统默认的命令提示符格式。
注意
zsh 使用环境变量
PS1 来定义命令提示符的格式,我们这里使用的环境变量 PROMPT 为其同义词。因此某些文章会使用环境变量 PS1 来定义命令提示符的格式。若希望每次开启一个新的 Terminal 窗口时使用同一套配置好的命令提示符,可在 zsh 配置文件 ~/.zshrc 中设置 PROMPT 参数。
基本参数
完整参数列表可在 zsh 用户手册 Prompt 章节 查看。
特殊字符
| 参数 | 输出 | 说明 | 补充 |
|---|---|---|---|
%% |
% |
百分号 % |
|
%) |
) |
右括号 ) |
登录信息
主要用于远程服务器终端的 Prompt 显示。
| 参数 | 输出 | 说明 | 补充 |
|---|---|---|---|
%l |
s001 |
用户登录的(tty)线程 | 剔除前缀 /dev/tty |
%M |
host.local |
完整主机名 | |
%m |
host |
简短主机名 | % 后可接一个整数,指定截取完整主机名中第几个 . 之前的内容 |
%n |
user |
登录用户名 | $USERNAME |
%y |
ttys001 |
用户登录的(tty)线程 | 剔除前缀 /dev/ |
终端状态
| 参数 | 输出 | 说明 | 补充 |
|---|---|---|---|
%# |
% # |
当用户拥有管理员权限(root)时显示 #,否则显示 % |
|
%? |
0 |
在提示符之前执行的最后一个命令的返回状态 | 命令成功执行后返回 0 |
%/ %d |
/Users/user/work |
当前工作目录 | % 后可接一个整数,指定显示的路径层数,负数则从根目录开始显示 |
%~ |
~/work |
当前工作目录 | 以 ~ 代替用户主目录,% 后可接一个整数,指定显示的路径层数 |
%! %h |
99 |
终端记录的历史命令数 | 历史命令存放在 ~/.zsh_history |
%. %c %C |
work |
当前工作目录的跟踪目录 | % 后可接一个整数,指定显示的路径层数 |
日期时间
| 参数 | 输出 | 说明 | 补充 |
|---|---|---|---|
%D |
23-09-26 |
以 yy-mm-dd 格式显示日期 |
%D{string} 字符串 string 由 strftime 函数处理,自定义显示格式 |
%T |
23:33 |
以 24 小时制显示当前时间 | |
%t %@ |
11:33PM |
以 12 小时制显示当前时间 | 上午 AM,下午 PM |
%* |
23:33:33 |
以 24 小时制显示当前时间 | 包括秒数 |
%w |
Tue 26 |
以 day-dd 格式显示日期 |
|
%W |
09/26/23 |
以 mm/dd/yy 格式显示日期 |
strftime 参数列表:
当前日期时间为:
|
|
- 世纪
参数 输出 说明 补充 %C20两位数世纪(00-99) - 年份
参数 输出 说明 补充 %G2023四位数年份(2023) 每周首日为周一 %g23两位数年份(00-99) 每周首日为周一 %Y2023四位数年份(2023) %y23两位数年份(00-99) - 月份
参数 输出 说明 补充 %BSeptember月份全称 %b%hSep月份缩写 %m09两位数月份(01-12) - 周数
参数 输出 说明 补充 %U39两位数周数(00-53) 每周首日为周日 %V39两位数周数(01-53) 每周首日为周一 %W39两位数周数(00-53) 每周首日为周一 - 星期
参数 输出 说明 补充 %ATuesday星期全称 %aTue星期缩写 %u2一位数星期(1-7) 每周首日为周一 %w2一位数星期(0-6) 每周首日为周日 - 日期
参数 输出 说明 补充 %d26两位数日期(01-31) %e26日期(1-31) 空格补位 %j269三位数日期(001-366) - 小时
参数 输出 说明 补充 %H2324 小时制两位数小时(00-23) %I1112 小时制两位数小时(01-12) %k2324 小时制小时(0-23) 空格补位 %l1112 小时制小时(1-12) 空格补位 %pPM12 小时制指示 AM或PM - 分钟
参数 输出 说明 补充 %M33两位数分钟(00-59) - 秒钟
参数 输出 说明 补充 %S33两位数秒钟(00-59) - 时区
参数 输出 说明 补充 %ZCST时区缩写 %z+0800所在时区与 UTC 的间隔 - 格式
参数 输出 说明 补充 %n换行 %tTab 制表符 %%%百分号 %-*3无补位 %_*_3空格补位 %0*030补位 - 预设
参数 输出 说明 补充 %D09/26/23%m/%d/%y%F2023-09-26%Y-%m-%d%R23:33%H:%M%r11:33:33 PM%I:%M:%S %p%T23:33:33%H:%M:%S%v26-Sep-2023%e-%b-%Y - 本地
参数 输出 说明 补充 %X23:33:33本地时间格式 %x09/26/23本地日期格式 %+Tue Sep 26 23:33:33 CST 2023本地时间与日期格式
视觉效果
基本格式为:
|
|
输出效果为:
Text Word
| 开始 | 结束 | 输出 | 说明 |
|:----:|:----:|:----:|:----:|
|`%B`|`%b`|**Text Word**|粗体|
|`%E`|||清除至行末|
|`%U`|`%u`|<u>Text Word</u>|下划线|
|`%S`|`%s`|<mark>Text Word</mark>|高亮,若定义了字体颜色,则高亮背景会继承字体颜色|
|`%F{color}`|`%f`|<span style="color:red;">Text Word</span>|前景(字体)颜色|
|`%K{color}`|`%k`|<span style="background-color:red;">Text Word</span>|背景颜色|
可选用的颜色
- 一般各种终端都接受的常用颜色名: black, red, green, yellow, blue, magenta, cyan 以及 white。
- 在终端中输入
echotc Co,可查看终端支持的颜色总数,如256,表示终端支持(0-255)的颜色编号。 - 在 Terminal 终端中输入
echo $TERM也可确认,如输出xterm-256color。
【参考】
- 查看基础 16 色以及 256 色色表。
- 256 Colors – Cheat Sheet – Xterm, HEX, RGB, HSL
- 256 Terminal colors and their 24bit equivalent (or similar)
条件判断
|
|
- 当
x所指代的判断条件为真时,选取true-text片段,否者选取false-text片段。 - 其中
x后的分隔符.可用任意字符替代,但需保证true-text片段中无相应字符。 x前可有整数n(默认n=0),与具体判断符x配合进行条件判断。true-text和false-text中可包含上述各种基本参数,也可嵌套条件判断。
一些简单的条件判读符 x 如下,详细列表请参考 zsh 用户手册 Prompt 章节。
| 判断符 | 真值条件 |
|---|---|
! |
终端以管理员权限运行(%# = %(!.#.%%)) |
? |
上一个命令的结束状态为 n(成功执行的命令的结束状态为 0) |
C / |
当前工作目录的绝对路径含至少 n 层(根目录 / 为 0 层) |
c . ~ |
当前工作目录的路径含至少 n 层(用户主目录以 ~ 代替) |
D |
当前月份为 n(1 月为 0) |
w |
当前星期为 n(周日为 0) |
d |
当前日期为 n (1-31) |
T |
当前小时数为 n(0-24) |
t |
当前分钟数为 n(0-59) |
右侧提示符
可自定义 RPROMPT 变量在终端右侧显示提示,其语法与 PROMPT 相同。
|
|
版本控制
zsh 集成了一些基本的版本控制系统,具体可参考Moving to zsh, part 6 – Customizing the zsh Prompt。
【参考】
一些大型的 zsh 主题项目,如 oh-my-zsh 以及 prezto 等,都集成了能够显示详细 Git 版本信息的模组。
【参考】
