Powerlevel9k:zsh下最棒的Powerline主題
Powerlevel9k 簡介
Powerlevel9k主題可以用於 vanilla ZSH 或 ZSH 框架,如 oh-my-ZSH、 Prezto、 Antigen 等等。
Powerlevel9k的四個主要目標:
開箱即用:讓使用者無需過多配置即可擁有一個讓人眼前一亮的主題
極易定製:為那些想調整提示符的使用者,提供更加語義化和模組化的方式直接在
~/。zshrc
中進行配置。Powerlevel9k將提示符分割成不同的分段,使用者可以使用這些內建的分段來自由組合最終的提示符。
提供豐富的配置分段(Segments):內建分段涵蓋使用場景非常多;從表示計算機狀態的分段到單元測試覆蓋率的分段再到 AWS 例項的分段,都有提供。
保證主題渲染的速度:Powerlevel9k 儘可能最佳化程式碼以提高執行速度
這是我的個人配置效果:
Powerlevel9k 簡寫為 P9k
原文首發於:
這裡的格式需要改動的地方太多,實在不想改了,對不住,
請見原文
。
本人自認為此文章寫的還算不錯。
安裝 Powerlevel9k
涉及兩個步驟:
安裝 Powerline 字型
安裝 Powerlevel9k 主題
安裝 Powerline 字型:
尋找字型是一件很傷心的事情,這裡我推薦Ubuntu Mono Nerd Font Complete (Win使用者選擇帶有Windows的字型檔案)、 DejaVu Sans Mono Nerd Font Complete 、 (等距)更紗黑體
通常配置檔案中會有這麼一項配置
POWERLEVEL9K_MODE
,它的值受字型和字型安裝的方式的影響,值與字型之間不對應顯示時可能會達不到效果:
POWERLEVEL9K_MODE=‘nerdfont-complete’
對應的關係如下:
Configuration valueDescription
default
對於常規的 powerline字型(如果您需要一個圖示較少的終端)
awesome-fontconfig
If you use Awesome Terminal Fonts with
fontconfig
,
without
the named icons。
awesome-mapped-fontconfig
If you use Awesome Terminal Fonts with
fontconfig
, including named icons (e。g。
$CODEPOINT_OF_AWESOME_CHECK
)。
awesome-patched
If you use Awesome Terminal Fonts with a pre-patched font。
nerdfont-complete
If you use Nerdfonts in
complete
variant。(
選擇這個簡單的
)
nerdfont-fontconfig
If you use Nerdfonts in a
fontconfig
setup。
我們選擇簡單一點的
nerdfont-complete
,在 Linux中我們這樣操作:
# Linux 中:
mkdir -p ~/。local/share/fonts
cd ~/。local/share/fonts
curl -fLo “DejaVu Sans Mono Nerd Font Complete。ttf” https://github。com/ryanoasis/nerd-fonts/blob/master/patched-fonts/DejaVuSansMono/Regular/complete/DejaVu%20Sans%20Mono%20Nerd%20Font%20Complete。ttf
Windows中我們直接下載字型檔案,雙擊安裝即可。
如果需要使用
fontconfig
程式進行安裝,那麼先透過
apt-get install fontconfig
安裝 fontconfig 程式,再點選上面字型連結檢視如何安裝該字型的說明。
安裝 P9k 主題:
安裝 zsh
sudo apt install zsh
安裝 Oh-My-Zsh
sh -c “$(curl -fsSL
https://
raw。githubusercontent。com
/ohmyzsh/ohmyzsh/master/tools/install。sh
)”
安裝P9k
git clone
https://
github。com/bhilburn/pow
erlevel9k。git
~/。oh-my-zsh/custom/themes/powerlevel9k
配置 oh-my-zsh :編輯
~/。zshrc
修改zsh的主題
ZSH_THEME=“powerlevel9k/powerlevel9k”
修改終端字型:
修改終端所使用的字型為 你安裝的某 nerd font 字型。
重啟終端:
修改完成 重啟終端或
source ~/.zshrc
使配置生效。
P9k要求,zsh 最小版本: 5。1
提示符定製方式
提示符由最基本的 分段 (segments) 構成
我們直接在 zsh 的配置檔案
~/。zshrc
中對其進行定製,下面是一個簡單配置
# 配置zsh 當前使用的主題
ZSH_THEME=“powerlevel9k/powerlevel9k”
# P9k 使用的模式
POWERLEVEL9K_MODE=‘nerdfont-complete’
# 顯示在左邊的提示元素(分段位於括號中並以空格隔開)
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir dir_writable vcs vi_mode)
# 顯示在右邊的提示元素(分段)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status)
# 左側提示符是否顯示兩行(游標顯示在下一行)
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
{{% notice note %}} 如有問題請參考後文給出的故障排查連結 {{% /notice %}}
尋找可用分段
系統狀態:
background_jobs - 後臺作業的指示器
battery - 電池狀態
context - 您的使用者名稱和主機,基於 $USER 和 SSH 狀態的條件化
date - 系統日期
dir - 你當前的工作目錄
dir_writable - 如果您對當前資料夾沒有寫許可權,則顯示鎖定圖示
disk_usage - 當前分割槽的磁碟使用情況
history - 當前行的命令號
host - 您當前的主機名
ip - 顯示當前 IP 地址
vpn_ip - 顯示當前的 VPN 地址
public_ip - 顯示你的公共IP地址
load - 機器的平均負載
os_icon - 作業系統圖示
ram - 顯示空閒記憶體
root_indicator - 指示使用者是否具有超級使用者狀態
status - 前一個命令的返回程式碼
swap - 列印當前交換檔案大小
time - 系統時間
user - 你現在的使用者名稱
vi_mode - 提示符的 Vi 編輯模式 (正常 | 插入)
ssh - 指示您是否處於 SSH 會話中
開發環境部分:
vcs - git 儲存庫相關資訊
程式語言相關:
GoLang Segments:
go_version - Go版本號
Javascript / Node。js Segments:
node_version - Node。js 版本號
nodeenv - 顯示 node 版本和環境
nvm - 略
PHP Segments:
php_version - 顯示當前的 PHP 版本
略
Python Segments:
略
Java Segments:
java_version - 顯示當前的 Java 版本
Cloud Segments:
AWS Segments:
aws
- The current AWS profile, if active。
aws_eb_env
- The current Elastic Beanstalk Environment。
docker_machine
- The current Docker Machine。
kubecontext
- The current context of your
kubectl
configuration。
dropbox
- Indicates Dropbox directory and syncing status using
dropbox-cli
其他:
custom_command - 建立一個自定義段來顯示任意命令的輸出
command_execution_time - 顯示當前命令執行時間
todo - Shows the number of tasks in your todo。txt tasks file。
detect_virt - Virtualization detection with systemd
newline
- Continues the prompt on a new line。 - 在新行上繼續提示符
openfoam - 顯示當前 sourced 環境
提示符基本定製
讓提示符顯示兩行:
# 左側提示符是否顯示兩行(游標顯示在下一行)
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
# 右側提示符是否顯示兩行
POWERLEVEL9K_RPROMPT_ON_NEWLINE=true
也可以使用
newline
分段將分段列表分成多行,比如
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir newline vcs)
設定提示符字首,比如
# 第一行左提示符字首(一般設定為空)
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=“↱”
# 最後一行左提示符字首符號(一般設定為 $)
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=“↳ ”
在提示符上方插入一空行以保持間距:
POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
禁用右側提示符:
POWERLEVEL9K_DISABLE_RPROMPT=true
Stylizing Your Prompt · Powerlevel9k/powerlevel9k Wiki 必看
獲取和設定顏色值
直接在終端執行下面的語句,獲取顏色值(顏色數值)
for code ({000。。255}) print -P —— “$code: %F{$code}最左側三位數字即顏色值Text Color%f”
一些終端模擬器允許您自定義終端使用的顏色。
P9k 提供
了兩個命令,您可以使用它們打印出模擬器使用的
顏色名稱
和
顏色數值
,以幫助您進行自定義;也可以直接使用獲取到的 顏色名稱
getColorCode background
getColorCode foreground
設定顏色值:
POWERLEVEL9K_分段名稱_FOREGROUND=‘red’
POWERLEVEL9K_分段名稱_BACKGROUND=‘blue’
也可以更改 P9k 的整體配色方案,比如設定為 light :
POWERLEVEL9K_COLOR_SCHEME=‘light’
背景色值設定為
none
表示不需要背景
將兩個分段連線在一起
可以為分段新增
_joined
字尾的形式,將兩個分段顯示為一個;添加了
_joined
字尾的分段(即使是自定義的分段)將會和它前一個分段連線在一起。請確保這兩個分段都能正常顯示,否則,可能會得到不想要的結果。
例如,如果要在右側提示符中將
status
和
background_jobs
連線在一起,可以這樣設定
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs_joined)
設定圖示
可以透過使用 p9k 提供的下例方法,列出主題中包含的所有圖示的名稱
get_icon_names
例如,如果您想對分段分隔符使用不同的字形,則可以使用以下方法輕鬆實現:
POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=$‘\uE0B1’
POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=$‘\uE0B3’
其中
$
環境變數字首,
\uE0B1
為該圖示的碼點。
您可以使用相同的方法在提示符中新增或刪除間距。例如,如果您想刪除 vcs段中 “分支” 圖示之後的空格,則只需在該圖示的碼點之後新增一個空格即可(沒有測試,這是刪除還是增加?):
POWERLEVEL9K_VCS_BRANCH_ICON=$‘\uF126 ’
比如系統圖標經常會顯示不下,可以透過新增空格的方式來增加間距
POWERLEVEL9K_WINDOWS_ICON:=‘ ’
POWERLEVEL9K_LINUX_UBUNTU_ICON=‘ ’
使用
icons_test
分段,測試圖示上色效果,它將會列出所有上色的圖示:
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(icons_test)
定製分段
你也可以修改分段的預設樣式和顯示格式。
更改最左側的符號:
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=“”
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=“▶ ”
POWERLEVEL9K_DISABLE_RPROMPT=true
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
定製日期 date:
變數預設值描述
POWERLEVEL9K_DATE_FORMAT%D{%d。%m。%y}
使用 Zsh 時間格式
定製時間time:
變數預設值描述
POWERLEVEL9K_TIME_FORMAT‘H:M:S’
使用Zsh 時間格式
示列:
# Reversed time format
POWERLEVEL9K_TIME_FORMAT=‘%D{%S:%M:%H}’
# Output time, date, and a symbol from the “Awesome Powerline Font” set
POWERLEVEL9K_TIME_FORMAT=“%D{%H:%M:%S \uE868 %d。%m。%y}”
主機名 host:
# 有些主機名很長並以。分隔;預設為 %m ,數字表示要顯示的段數,負數表示只顯示最後一段
POWERLEVEL9K_HOST_TEMPLATE=“%2m”
# 主機圖示(預設情況)
# 本地主機圖示
POWERLEVEL9K_HOST_ICON=“\uF109 ”
# SSH遠端主機圖示
POWERLEVEL9K_SSH_ICON=“\uF489 ”
dir目錄:
對於某些字型,可以在特定目錄下還可顯示特定目錄圖示,比如在home目錄顯示一個房子。要關閉這些圖示可以見下面的變數設定為空即可:
POWERLEVEL9K_HOME_ICON=‘’
POWERLEVEL9K_HOME_SUB_ICON=‘’
POWERLEVEL9K_FOLDER_ICON=‘’
POWERLEVEL9K_ETC_ICON=‘’
您可以截斷過長的路徑將其限制在一定長度之內:
變數預設值描述
POWERLEVEL9K_DIR_PATH_ABSOLUTE
None如果設定為
true
將使用絕對路徑而不是主資料夾縮寫
~POWERLEVEL9K_SHORTEN_DIR_LENGTH2
如果您的縮短策略是整個目錄,則此欄位決定在末尾留下多少個目錄。 如果縮短策略是透過字元計數,則此欄位決定允許每個目錄字串使用多少個字元
POWERLEVEL9K_SHORTEN_STRATEGY
None如何截斷目錄字串。(東西太多,請檢視文件)
POWERLEVEL9K_SHORTEN_DELIMITER。。
要在截斷的字串中使用的分隔符。 可以是任何字串,也可以是一個空字串
如果要自定義
目錄分隔符
,可以設定:
# Double quotes are important here!
POWERLEVEL9K_DIR_PATH_SEPARATOR=“%F{red} $(print_icon ‘LEFT_SUBSEGMENT_SEPARATOR’) %F{black}”
powerlevel9k/segments
參考他人的配置
參考這裡列出的效果圖和
配置
資訊:Show Off Your Config
同時注意,終端型別、終端字型、終端配主題
這是我的個人配置效果
配置檔案見我的 : Powerlevel9k - 。zshrc
幾個不錯的配置:
P9KGT 配置方式值得參考
故障排除
如果遇到問題,可檢視此處的故障排查:Troubleshooting · Powerlevel9k/powerlevel9k Wiki
在我當前環境(WSL+ Oh-My-Zsh + Cmder)中,右側提示符只能設定一些簡單的分段,並且分段會被截斷一部分,右側如果放長一點的分段就會導致右側提示符溢位到下一行。
{{% notice note %}} 注意: 配置時
=
等號兩邊不能有空格。 {{% /notice %}}
啟用和禁用 Powerlevel9k
禁用 P9k
$ prompt_powerlevel9k_teardown
然後可以這樣啟用 P9k
$ prompt_powerlevel9k_setup
另外還有個:Powerlevel10k: A Zsh theme