Pure
简洁、美观且快速的 ZSH 提示符
概述
大多数提示符都很混乱、丑陋且速度慢。我们希望能有一个视觉上令人愉悦且不碍事的提示符。
为什么选择它?
- 配备了完美的提示符字符。 作者遍历了整个 Unicode 范围才找到它。
- 显示
git
分支及其是否为脏状态(用*
表示)。 - 使用上下箭头指示是否有未推送/未拉取的
git
提交。(检查是异步完成的!) - 如果最后一个命令未以
0
退出,提示符字符将变为红色。 - 如果命令执行时间超过设定阈值,将显示执行时间。
- 仅在 SSH 会话或容器中显示用户名和主机名。
- 在标题中显示当前路径,在运行进程时显示当前文件夹和命令。
- 支持通过反向提示符符号显示 VI 模式(Zsh 5.3+)。
- 是定制提示符的优秀起点。
安装
可以通过 npm
(而不是 yarn
)或手动安装。需要 Git 2.15.2+ 和 ZSH 5.2+。旧版本的 ZSH 也可以工作,但不推荐。
npm
npm install --global pure-prompt
就是这样。跳到入门。
Homebrew
brew install pure
如果你没有使用 Homebrew 安装的 ZSH (brew install zsh
和 $(brew --prefix)/bin/zsh
),还需要将 site-functions 添加到 $HOME/.zshrc
中的 fpath
:
fpath+=("$(brew --prefix)/share/zsh/site-functions")
手动安装
- 将此仓库克隆到某处。这里我们使用
$HOME/.zsh/pure
。
mkdir -p "$HOME/.zsh"
git clone https://github.com/sindresorhus/pure.git "$HOME/.zsh/pure"
- 在
$HOME/.zshrc
中将克隆的仓库路径添加到$fpath
。
# .zshrc
fpath+=($HOME/.zsh/pure)
入门
初始化提示符系统(如果尚未初始化)并选择 pure
:
# .zshrc
autoload -U promptinit; promptinit
prompt pure
选项
选项 | 描述 | 默认值 |
---|---|---|
PURE_CMD_MAX_EXEC_TIME | 显示进程运行时间的最大执行时间,超过此时间则显示。 | 5 秒 |
PURE_GIT_PULL | 阻止 Pure 检查当前 Git 远程仓库是否已更新。 | 1 |
PURE_GIT_UNTRACKED_DIRTY | 在脏状态检查中不包含未跟踪的文件。主要用于大型仓库(如 WebKit)。 | 1 |
PURE_GIT_DELAY_DIRTY_CHECK | 延迟 git 脏状态检查的时间(秒),当 git status 需要超过 5 秒时生效。 | 1800 秒 |
PURE_PROMPT_SYMBOL | 定义提示符符号。 | ❯ |
PURE_PROMPT_VICMD_SYMBOL | 定义在 vicmd 键盘映射激活时使用的提示符符号(VI 模式)。 | ❮ |
PURE_GIT_DOWN_ARROW | 定义 git 下箭头符号。 | ⇣ |
PURE_GIT_UP_ARROW | 定义 git 上箭头符号。 | ⇡ |
PURE_GIT_STASH_SYMBOL | 定义 git 暂存符号。 | ≡ |
Zstyle 选项
显示 git 暂存状态在默认情况下未激活。要激活此功能,您需要通过 zstyle
选择加入:
zstyle :prompt:pure:git:stash show yes
您可以将 Pure 设置为仅 git fetch
当前本地分支的上游分支。在某些情况下,这可以使 Git 箭头的更新速度更快,但对大多数用户来说,最好保持禁用此设置。您可以通过以下方式启用它:
zstyle :prompt:pure:git:fetch only_upstream yes
nix-shell
集成在使用 nix shell 时会将 shell 名称添加到提示符中。此功能默认启用,您可以通过以下方式禁用它:
zstyle :prompt:pure:environment:nix-shell show no
颜色
如 ZSH 的手册中所述,颜色值可以是:
- 对应于终端颜色索引的十进制整数。如果您的
$TERM
是xterm-256color
,请参阅此图表。 - 以下九种颜色的名称之一:
black
(黑色),red
(红色),green
(绿色),yellow
(黄色),blue
(蓝色),magenta
(洋红),cyan
(青色),white
(白色),和default
(终端的默认前景色)。 #
后跟十六进制格式的 RGB 三元组,例如#424242
。仅当您的终端支持 24 位颜色(真彩色)或加载了zsh/nearcolor
模块时支持。
可以使用 zstyle
通过 :prompt:pure:$color_name
模式和 color
样式来更改颜色。颜色名称、默认值及其影响的部分如下:
execution_time
(黄色) - 当上一个命令的执行时间超过PURE_CMD_MAX_EXEC_TIME
时的执行时间。git:arrow
(青色) - 用于PURE_GIT_UP_ARROW
和PURE_GIT_DOWN_ARROW
。git:stash
(青色) - 用于PURE_GIT_STASH_SYMBOL
。git:branch
(242) - 在 Git 仓库中显示当前分支名称。git:branch:cached
(红色) - 当数据不是最新时显示当前分支的名称。git:action
(242) - 在 Git 仓库中显示当前正在进行的操作(cherry-pick,rebase 等)。git:dirty
(218) - 显示分支为脏状态的星号。host
(242) - 当在远程机器上时显示主机名。path
(蓝色) - 当前路径,例如PWD
。prompt:error
(红色) - 当上一个命令失败时显示的PURE_PROMPT_SYMBOL
。prompt:success
(洋红色) - 当上一个命令成功时显示的PURE_PROMPT_SYMBOL
。prompt:continuation
(242) - 显示解析器状态在延续提示符(PS2)中的颜色。它是此截图中的粉红部分,显示在与virtualenv
相同的位置。您可以例如将两种颜色匹配,使 Pure 看起来统一。suspended_jobs
(红色) - 表示后台正在运行作业的✦
符号。user
(242) - 当在远程机器上时显示的用户名。user:root
(默认) - 当用户为 root 时显示的用户名。virtualenv
(242) - 使用中的 Pythonvirtualenv
名称。
以下图表显示了每种颜色在提示符中应用的位置:
┌────────────────────────────────────────────────────── 用户
│ ┌─────────────────────────────────────────────── 主机
│ │ ┌─────────────────────────────────── 路径
│ │ │ ┌────────────────────────
如果你不能使用这样的终端,模块[`zsh/nearcolor`](http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fnearcolor-Module)可能会很有用。它会将任何十六进制颜色映射到你的终端的88或256色调色板中最接近的颜色,但不会使用前16种颜色,因为它们的值可以由用户修改。请记住,当使用此模块时,你将无法显示真正的RGB颜色。它只允许你以一种更方便的方式指定颜色。以下是如何使用该模块的示例:
```sh
# .zshrc
zmodload zsh/nearcolor
zstyle :prompt:pure:path color '#FF0000'
示例
# .zshrc
autoload -U promptinit; promptinit
# 可选地定义一些选项
PURE_CMD_MAX_EXEC_TIME=10
# 改变路径颜色
zstyle :prompt:pure:path color white
# 改变`prompt:success`和`prompt:error`的颜色
zstyle ':prompt:pure:prompt:*' color cyan
# 开启git stash状态
zstyle :prompt:pure:git:stash show yes
prompt pure
提示
在截图中,你会看到Pure在Hyper中运行,使用hyper-snazzy主题和Menlo字体。
Tomorrow Night Eighties主题与Droid Sans Mono字体(15pt)也是一个不错的组合。 只需确保你的终端启用了抗锯齿。
要像截图中那样使命令着色,请安装zsh-syntax-highlighting。
集成
oh-my-zsh
- 在你的
.zshrc
中设置ZSH_THEME=""
以禁用oh-my-zsh主题。 - 按照Pure安装说明进行操作。
- 不要启用以下(不兼容的)插件:
vi-mode
,virtualenv
。
注意: oh-my-zsh
覆盖了prompt,因此Pure必须在source $ZSH/oh-my-zsh.sh
之后激活。
prezto
Pure已捆绑在Prezto中。无需安装。
在你的~/.zpreztorc
中添加prompt pure
。
zim
在你的.zimrc
中添加zmodule sindresorhus/pure --source async.zsh --source pure.zsh
然后运行zimfw install
。
zplug
将以下两行更新到你的.zshrc
文件:
zplug mafredri/zsh-async, from:github
zplug sindresorhus/pure, use:pure.zsh, from:github, as:theme
zinit
将以下两行更新到你的.zshrc
文件(顺序重要):
zinit ice compile'(pure|async).zsh' pick'async.zsh' src'pure.zsh'
zinit light sindresorhus/pure
zi
将以下行更新到你的.zshrc
文件:
zi light-mode for @sindresorhus/pure
参见ZI wiki了解更多。
常见问题
目前没有常见问题。
参见FAQ Archive了解以前的常见问题。
移植
- ZSH
- therealklanni/purity - 更紧凑的当前工作目录,主要提示行上的重要细节,以及额外的Git指示器。
- intelfx/pure - 适用于Solarized的颜色,高度详细,完全异步的Git集成。
- forivall/pure - 一个极简分支,在路径中突出显示Git存储库的根目录。
- dfurnes/purer - 带有内置Vim模式指示器的紧凑单行提示。
- chabou/pure-now - 支持Now的分支。
- pure10k - 配置文件适用于Powerlevel10k,使其看起来像Pure。
- Bash
- sapegin/dotfiles - 适用于Terminal.app的提示和颜色主题。
- Fish
- pure-fish/pure - 完全测试的Fish移植,目标是功能对等。
- Rust
- xcambar/purs - 用Rust编写的Pure风格提示。
- Go
- talal/mimir - 用Go编写的Pure风格提示,支持Kubernetes和OpenStack云。不打算实现功能对等。
- PowerShell
- nickcox/pure-pwsh - Pure提示的PowerShell/PS Core实现。