Powerlevel10k 是 Zsh 的主題。它強調速度、靈活性和開箱即用的體驗。
exec zsh
重新啟動 Zsh。p10k configure
。 輸入p10k configure
直接從終端存取內建設定精靈。
除 Pure 之外的所有樣式在功能上都是等效的。它們顯示相同的訊息,僅在表示方式上有所不同。
配置精靈根據您的偏好建立~/.p10k.zsh
。可以透過編輯此文件來完成其他提示自訂。它有大量註釋可以幫助您瀏覽配置選項。
提示:在執行p10k configure
之前安裝建議的字型以解鎖所有提示樣式。
常問問題:
故障排除:
當您按ENTER時,下一個提示會立即出現。使用 Powerlevel10k 不會有提示延遲。如果您在 Raspberry Pi 上安裝 Cygwin, cd
到 Linux Git 存儲庫並激活足夠的提示段以填充屏幕兩側的四個提示行...等等,這太瘋狂了,沒有人這樣做過。恐怕也是不可能的。重點是,無論您做什麼,Powerlevel10k 提示總是很快!
請注意每個命令的效果如何立即反映在下一個提示中。
命令 | 提示指示器 | 意義 |
---|---|---|
timew start hack linux | ⌚ hack linux | 時間戰士中啟用時間跟踪 |
touch xy | ?2 | Git 儲存庫中有 2 個未追蹤的文件 |
rm COPYING | !1 | Git 儲存庫中 1 個未暫存的更改 |
echo 3.7.3 >.python-version | ? 3.7.3 | pyenv 中目前的 python 版本 |
其他能夠顯示相同資訊的 Zsh 主題要么會產生提示滯後,要么會列印不反映系統當前狀態的提示,然後稍後刷新。使用 Powerlevel10k,您可以獲得快速提示和最新資訊。
常見問題:真的很快嗎?
Powerlevel10k 瞭解所有 Powerlevel9k 設定參數。
從 Powerlevel9k 遷移到 Powerlevel10k 的過程非常簡單。您的所有POWERLEVEL9K
配置參數仍然有效。提示看起來和以前一樣(幾乎),但速度會快得多(當然)。
常問問題:
Powerlevel10k 可以產生與 Pure 相同的提示。輸入p10k configure
並選擇Pure風格。
使用 Pure 風格時,您仍然可以使用 Powerlevel10k 功能,例如瞬態提示或即時提示。
若要自訂提示,請編輯~/.p10k.zsh
。 Powerlevel10k 無法辨識 Pure 設定參數,因此您需要使用POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
~/.p10k.zsh
不是PURE_CMD_MAX_EXEC_TIME=3
等。該文件有大量註釋可以幫助您瀏覽它。
常見問題:配置精靈中最好的提示樣式是什麼?
如果您的~/.zshrc
加載了許多插件,或者可能只是加載了一些速度較慢的插件(例如 pyenv 或 nvm),您可能已經注意到 Zsh 需要一些時間才能啟動。
Powerlevel10k 可以消除 Zsh 啟動延遲,即使它不是由主題引起的。
此功能稱為即時提示。您需要透過p10k configure
或手動明確啟用它。它的作用正如其所言——在 Zsh 啟動時立即列印提示,讓您在插件仍在加載時開始輸入。
其他主題會增加Zsh 啟動延遲——有些會增加很多,有些則會增加一點點。 Powerlevel10k 徹底刪除了它。
如果您對Instant Prompt 的工作原理感到好奇,請參閱 zsh-bench 中的此部分。
常見問題:如何設定即時提示?
某些命令的行為取決於全域環境。例如, kubectl run ...
在目前 kubernetes 上下文定義的叢集上執行映像。如果您經常變更「prod」和「testing」之間的上下文,您可能想要在 Zsh 提示字元中顯示目前上下文。如果您對 AWS、Azure 和 Google Cloud 憑證執行相同的操作,提示將會變得非常擁擠。
輸入“按命令顯示” 。此功能使提示段僅在與您目前鍵入的命令相關時才出現。
預設情況下,透過p10k configure
enable show on 指令為多個提示段所建立的設定。這是 kubernetes 上下文的相關參數:
# Show prompt segment "kubecontext" only when the command you are typing invokes one of these tools.
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND= ' kubectl|helm|kubens '
若要自訂何時顯示不同的提示段,請開啟~/.p10k.zsh
,搜尋SHOW_ON_COMMAND
並刪除這些參數以無條件顯示受影響的段,或變更它們的值。
當透過p10k configure
啟用瞬態提示時,Powerlevel10k 將在接受命令列時修剪每個提示。
瞬時提示使得從終端回滾複製貼上一系列命令變得更加容易。
提示:如果啟用瞬時提示,請利用兩行提示。您將獲得用於鍵入命令的額外空間的好處,而不會出現回滾密度降低的常見缺點。稀疏提示(提示前有一個空白行)與瞬態提示結合使用也非常有效。
目前工作目錄可能是最重要的提示段。 Powerlevel10k 竭盡全力突出顯示其重要部分,並在水平空間變得稀缺時以最小的資訊損失截斷它。
當完整目錄不適合時,最左邊的段將被截斷為其最短的唯一前綴。在截圖影片中, ~/work
變成~/wo
。它不能被截斷為~/w
因為它會不明確(記錄會話時有~/wireguard
)。下一部分 - projects
- 變成p
,因為~/work/
中沒有其他以p
開頭的內容。
目錄段以三種顏色之一顯示:
提示:如果您複製貼上截斷的目錄並按TAB 鍵,它將完成原始目錄。
故障排除:使用Rainbow風格時,很難在提示中看到目錄。
Powerlevel10k 可以設定為看起來像任何其他 Zsh 主題。
內建 Pure、Powerlevel9k 和 robbyrussell 模擬。要模擬其他主題的外觀,您需要編寫合適的設定檔。最好的方法是執行p10k configure
,選擇最接近您目標的樣式,然後編輯~/.p10k.zsh
。
Powerlevel10k 的全系列外觀涵蓋斯巴達:
到荒謬的靡:
Powerlevel10k 隨附數十個內建的高品質提示段,可顯示來自各種來源的資訊。當您執行p10k configure
並選擇 Pure 以外的任何樣式時,預設會啟用其中許多段,而其他段則可以透過開啟~/.p10k.zsh
並取消註解來手動啟用。您可以根據需要啟用任意數量的分段。它不會減慢您的提示符號或 Zsh 啟動速度。
部分 | 意義 |
---|---|
anaconda | conda 的虛擬環境 |
asdf | 來自 asdf 的工具版本 |
aws | 亞馬遜簡介 |
aws_eb_env | AWS彈性beanstalk環境 |
azure | 天藍色帳號名 |
background_jobs | 存在後台作業 |
battery | 內部電池狀態和充電水平(是的,確實包括電池) |
command_execution_time | 最後一個命令的持續時間(牆上時間) |
context | 使用者@主機名稱 |
cpu_arch | CPU架構 |
dir | 目前工作目錄 |
direnv | 目錄狀態 |
disk_usage | 磁碟使用情況 |
dotnet_version | 點網版本 |
fvm | 來自 fvm 的 flutter 環境 |
gcloud | 谷歌雲端cli帳戶和項目 |
goenv | 來自 goenv 的 go 環境 |
google_app_cred | 谷歌應用程式憑證 |
go_version | 去版本 |
haskell_stack | 堆疊中的 haskell 版本 |
ip | 指定網路介面的 IP 位址和頻寬使用情況 |
java_version | java版本 |
jenv | 來自 jenv 的 java 環境 |
kubecontext | 目前的 Kubernetes 上下文 |
laravel_version | laravel php 框架版本 |
load | CPU負載 |
luaenv | 來自 luaenv 的 lua 環境 |
midnight_commander | 午夜指揮官砲彈 |
nix_shell | nix shell 指示器 |
nnn | nnn 外殼 |
lf | 外殼 |
chezmoi_shell | 切茲莫伊外殼 |
nodeenv | 來自nodeenv的node.js環境 |
nodenv | 來自nodenv的node.js環境 |
node_version | Node.js 版本 |
nordvpn | NordVPN 連線狀態 |
nvm | 來自 nvm 的 Node.js 環境 |
os_icon | 您的作業系統標誌(macOS 為 apple,debian 為 swirl 等) |
package | 來自 package.json 的name@version |
per_directory_history | Oh My Zsh 每個目錄歷史本地/全域指示器 |
perlbrew | 來自 perlbrew 的 Perl 版本 |
phpenv | 來自 phpenv 的 php 環境 |
php_version | PHP版本 |
plenv | 來自 plenv 的 Perl 環境 |
prompt_char | 多功能提示符號;依 vi 模式而變化: ❯ 、 ❮ 、 V 、 ▶ 分別表示插入、指令、視覺和替換模式;出錯時變為紅色 |
proxy | 系統範圍的http/https/ftp代理 |
public_ip | 公有IP位址 |
pyenv | 來自 pyenv 的 python 環境 |
ram | 空閒記憶體 |
ranger | 遊俠殼 |
yazi | 睚眥貝殼 |
rbenv | 來自 rbenv 的 ruby 環境 |
rust_version | rustc版本 |
rvm | RVM 的 ruby 環境 |
scalaenv | 來自 scalaenv 的 scala 版本 |
status | 最後一個指令的退出代碼 |
swap | 使用過的交換 |
taskwarrior | 任務戰士任務數 |
terraform | 地形工作區 |
terraform_version | 地形版本 |
time | 目前時間 |
timewarrior | 時間戰士追蹤狀態 |
todo | 待辦事項 |
toolbox | 工具箱名稱 |
vcs | Git 儲存庫狀態 |
vim_shell | vim shell ( :sh ) |
virtualenv | 來自 venv 的 python 環境 |
vi_mode | vi 模式(如果您啟用了prompt_char,則不需要此模式) |
vpn_ip | 虛擬專用網路指示器 |
wifi | 無線網路速度 |
xplr | xplr外殼 |
如果沒有提示段可以滿足您的需要,請實現您自己的提示段。 Powerlevel10k 提供公共 API 定義分段,其速度和內建分段一樣靈活。
在 Linux 上,您可以透過讀取/sys/class/thermal/thermal_zone0/temp
來取得目前 CPU 溫度。該截圖影片展示瞭如何定義提示段來顯示該值。定義段後,您可以像任何其他段一樣使用它。所有標準自訂參數都可以開箱即用。
輸入p10k help segment
以供參考。
注意:如果您在已初始化的互動式 shell 中修改POWERLEVEL9K_*
參數(而不是編輯~/.p10k.zsh
),則變更可能不會立即生效。若要套用修改,請呼叫p10k reload
。設定POWERLEVEL9K_DISABLE_HOT_RELOAD=false
消除了p10k reload
的必要性,但會導致提示速度稍慢。
提示:在您自己的段名稱前加上my_
前綴,以避免與 Powerlevel10k 的未來版本發生衝突。
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~ /powerlevel10k
echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
中國用戶可以使用gitee.com上的官方鏡像來更快地下載。
中國用戶可以使用gitee.com上的官方鏡像加速下載。
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~ /powerlevel10k
echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
這是最簡單的安裝方式,即使您使用外掛程式管理器也可以使用。只需確保在外掛程式管理器中停用當前主題即可。請參閱故障排除以取得協助。
克隆儲存庫:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM :- $HOME / .oh-my-zsh / custom} /themes/powerlevel10k
中國用戶可以使用gitee.com上的官方鏡像來更快地下載。
中國用戶可以使用gitee.com上的官方鏡像加速下載。
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM :- $HOME / .oh-my-zsh / custom} /themes/powerlevel10k
開啟~/.zshrc
,找到設定ZSH_THEME
的行,並將其值變更為"powerlevel10k/powerlevel10k"
。
將zstyle :prezto:module:prompt theme powerlevel10k
加入~/.zpreztorc
。
將zmodule romkatv/powerlevel10k --use degit
加入~/.zimrc
並執行zimfw install
。
將antibody bundle romkatv/powerlevel10k
加入~/.zshrc
。
將romkatv/powerlevel10k
加入~/.zsh_plugins.txt
。
將antigen theme romkatv/powerlevel10k
加入~/.zshrc
。確保您在其後的某個地方antigen apply
。
加zplug romkatv/powerlevel10k, as:theme, depth:1
到~/.zshrc
。
將zgen load romkatv/powerlevel10k powerlevel10k
加入到~/.zshrc
。
添加zplugin ice depth=1; zplugin light romkatv/powerlevel10k
到~/.zshrc
。
depth=1
冰的使用是可選的。 Powerlevel10k 既不建議也不官方支援其他類型的冰。
添加zinit ice depth=1; zinit light romkatv/powerlevel10k
到~/.zshrc
。
depth=1
冰的使用是可選的。 Powerlevel10k 既不建議也不官方支援其他類型的冰。
添加zi ice depth=1; zi light romkatv/powerlevel10k
到~/.zshrc
。
depth=1
冰的使用是可選的。 Powerlevel10k 既不建議也不官方支援其他類型的冰。
將plug "romkatv/powerlevel10k"
加入到~/.zshrc
。
brew install powerlevel10k
echo " source $( brew --prefix ) /share/powerlevel10k/powerlevel10k.zsh-theme " >> ~/.zshrc
yay -S --noconfirm zsh-theme-powerlevel10k-git
echo ' source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
上面引用的 zsh-theme-powerlevel10k-git 是官方的 Powerlevel10k 套件。
apk add zsh zsh-theme-powerlevel10k
mkdir -p ~ /.local/share/zsh/plugins
ln -s /usr/share/zsh/plugins/powerlevel10k ~ /.local/share/zsh/plugins/
請按照本頁上的說明進行操作。
第一次執行時,Powerlevel10k 設定精靈會詢問您幾個問題並設定提示。如果它沒有自動觸發,請輸入p10k configure
。配置精靈根據您的偏好建立~/.p10k.zsh
。可以透過編輯此文件來完成其他提示自訂。它有大量註釋可以幫助您瀏覽配置選項。
常問問題:
故障排除:
如果您以前使用過Powerlevel9k,請不要刪除配置選項。 Powerlevel10k 將擷取它們並為您提供與您習慣的相同的提示 UI。請參閱 Powerlevel9k 相容性。
常問問題:
故障排除:與 Powerlevel9k 相比,提示中存在多餘或缺少的空格。
Powerlevel10k 不需要自訂字體,但可以利用它們(如果可用)。它可以與 Nerd Fonts、Source Code Pro、Font Awesome、Powerline 甚至預設系統字體配合使用。僅當使用 Nerd Fonts 時,樣式選項的完整選擇才可用。
?推薦字體:為 Powerlevel10k 修補的 Meslo Nerd 字體。 ?
由 Jim Lyles 為 Bitstream 設計的華麗等寬字體,由該公司為 Apple 定制,由 André Berg 進一步定制,最後由您真正使用最初由 Nerd Fonts 的 Ryan L McIntyre 開發的定制腳本進行修補。包含 Powerlevel10k 可能需要的所有字形和符號。在所有主要作業系統的數十個不同終端上經過了實戰測試。
常見問題:推薦字體是如何建立的?
如果您使用的是 iTerm2 或 Termux, p10k configure
可以為您安裝建議的字型。當詢問是否安裝Meslo Nerd Font時,只需回答Yes
即可。
如果您使用不同的終端,請繼續手動安裝字體。 ?
MesloLGS NF
字體可用於系統上的所有應用程式。p10k configure
並在詢問是否安裝Meslo Nerd Font時回答Yes
。或者,開啟iTerm2 → Preferences → Profiles → Text並將Font設為MesloLGS NF
。MesloLGS NF
系列。module.exports.config
下的fontFamily
的值改為MesloLGS NF
。terminal.integrated.fontFamily
,並將下方的數值設為MesloLGS NF
。請參閱此螢幕截圖以了解其外觀,或查看此問題以獲取更多資訊。MesloLGS NF Regular
。MesloLGS NF Regular
。MesloLGS NF Regular
。MesloLGS NF
。MesloLGS NF
。MesloLGS NF
。MesloLGS NF
。p10k configure
並在詢問是否安裝Meslo Nerd Font時回答Yes
。config
,前往外觀,點擊新增字體,點擊開啟圖庫,選擇MesloLGS NF.css ,點擊匯入並在主頁視圖中鍵入exit
以重新載入字體。MesloLGS NF
。MesloLGS NF Regular
。按一下「關閉」退出「首選項」對話方塊。MesloLGS NF Regular
。按一下「關閉」退出「首選項」對話方塊。MesloLGS NF
。如果您有會話,則需要透過設定→右鍵點選單一會話→編輯會話→終端設定→字型設定來變更每個會話的字型。MesloLGS NF Regular
。若要變更遠端主機連接的字體,請前往Preferences → Terminal Options → Look and Feel並將Terminal UI下的Font:改為MesloLGS NF Regular
。MesloLGS NF
字體。MesloLGS NF Regular
。MesloLGS NF
,然後按一下「確定」 。按一下「確定」儲存設定檔。選擇新的設定檔並點擊設為預設值。~/.config/alacritty/alacritty.toml
並在其中加入以下部分: [ font . normal ]
family = " MesloLGS NF "
~/.config/foot/foot.ini
並在其中加入以下部分: font =MesloLGS NF: size =12
~/.config/kitty/kitty.conf
並在其中加入以下行: font_family MesloLGS NF
MesloLGS NF
。需要 PuTTY 版本 >= 0.75。$HOME/.config/wezterm/wezterm.lua
並新增以下內容: local wezterm = require ' wezterm ' ;
return {
font = wezterm . font ( " MesloLGS NF " ),
}
~/.Xresources
並向其中新增以下行: URxvt.font: xft:MesloLGS NF:size=11
xrdb ~/.Xresources
重新載入它。新配置將應用於所有新終端。~/.Xresources
並向其中新增以下行: xterm*faceName: MesloLGS NF
xrdb ~/.Xresources
重新載入它。新配置將應用於所有新終端。~/.config/zed/settings.json
並將terminal.font_family
設定為"MesloLGS NF"
。 {
"terminal" : {
"font_family" : "MesloLGS NF"
} ,
// Other settings.
}
'MesloLGS NF'
(包括引號)並將自訂 CSS(內嵌文字)設定為以下內容: @font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Regular.ttf" );
font-weight : normal;
font-style : normal;
}
@font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold.ttf" );
font-weight : bold;
font-style : normal;
}
@font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Italic.ttf" );
font-weight : normal;
font-style : italic;
}
@font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold%20Italic.ttf" );
font-weight : bold;
font-style : italic;
}
~/.config/deepin/deepin-terminal/config.conf
並新增以下部分: [basic.interface.font]
value = " MesloLGS NF "
p10k configure
產生新的~/.p10k.zsh
。舊配置可能無法與新字體配合使用。使用不同的終端並知道如何為其設定字體?透過發送 PR 來擴展清單來分享您的知識!
在 Docker 中嘗試 Powerlevel10k。您可以在嘗試主題時安全地對檔案系統進行任何變更。一旦退出 Zsh,容器就會被刪除。
docker run -e TERM -e COLORTERM -e LC_ALL=C.UTF-8 -it --rm alpine sh -uec '
apk add git zsh nano vim
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc
cd ~/powerlevel10k
exec zsh '
提示:在執行 Docker 命令之前安裝建議的字體以存取所有提示樣式。
提示:在 Docker 中執行p10k configure
來嘗試不同的提示樣式。
Powerlevel10k 在 MIT 許可證下發布。
$HOME/.git
中的 Git 狀態未在提示中顯示?更新 Powerlevel10k 的命令取決於它的安裝方式。
安裝 | 更新命令 |
---|---|
手動的 | git -C ~/powerlevel10k pull |
哦我的Zsh | git -C ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k pull |
普雷斯托 | zprezto-update |
齊姆 | zimfw update |
抗原 | antigen update |
解毒劑 | antidote update |
茲插頭 | zplug update |
茲根 | zgen update |
外掛 | zplugin update |
齊尼特 | zinit update |
子 | zi update |
電擊 | zap update |
自製 | brew update && brew upgrade |
架構Linux | yay -S --noconfirm zsh-theme-powerlevel10k-git |
阿爾卑斯Linux | apk update && apk upgrade |
重要提示:更新 Powerlevel10k 後重新啟動 Zsh。請勿使用source ~/.zshrc
。
從~/.zshrc
中刪除所有對「p10k」的引用。您可能會在頂部看到此片段:
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
底部是這樣的:
[[ ! -f ~ /.p10k.zsh ]] || source ~ /.p10k.zsh
這些是由配置精靈添加的。刪除它們。
從~/.zshrc
、 ~/.zpreztorc
和~/.zimrc
中刪除所有對「powerlevel10k」的引用(其中一些檔案可能會遺失 - 這是正常的)。這些引用是您在安裝 Powerlevel10k 時手動新增的。如果需要提醒,請參閱安裝說明。
驗證所有對「p10k」和「powerlevel10k」的引用都已從~/.zshrc
、 ~/.zpreztorc
和~/.zimrc
中消失。
grep -E ' p10k|powerlevel10k ' ~ /.zshrc ~ /.zpreztorc ~ /.zimrc 2> /dev/null
如果此命令產生輸出,則仍引用“p10k”或“powerlevel10k”。你需要刪除它們。
刪除Powerlevel10k設定檔。該檔案由配置精靈創建,可能包含您自己的手動編輯。
rm -f ~ /.p10k.zsh
刪除Powerlevel10k來源檔。這些檔案已在您安裝 Powerlevel10k 時下載。刪除它們的命令取決於您選擇的安裝方法。如果需要提醒,請參閱安裝說明。
安裝 | 卸載命令 |
---|---|
手動的 | rm -rf ~/powerlevel10k |
哦我的Zsh | rm -rf -- ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k |
普雷斯托 | 不適用 |
齊姆 | zimfw uninstall |
抗原 | antigen purge romkatv/powerlevel10k |
解毒劑 | antidote purge romkatv/powerlevel10k |
茲插頭 | zplug clean |
茲根 | zgen reset |
外掛 | zplugin delete romkatv/powerlevel10k |
齊尼特 | zinit delete romkatv/powerlevel10k |
子 | zi delete romkatv/powerlevel10k |
電擊 | zsh -ic 'zap clean' |
自製 | brew uninstall powerlevel10k |
架構Linux | yay -R --noconfirm zsh-theme-powerlevel10k-git |
阿爾卑斯Linux | apk del zsh-theme-powerlevel10k |
重新啟動 Zsh。請勿使用source ~/.zshrc
。
刪除 Powerlevel10k 快取檔案。
rm -rf -- " ${XDG_CACHE_HOME :- $HOME / .cache} " /p10k- * (N) " ${XDG_CACHE_HOME :- $HOME / .cache} " /gitstatus
uname -sm | tr ' [A-Z] ' ' [a-z] '
target_uname
的值替換為上一個命令的輸出後,在連接到 Internet 的電腦上執行以下命令: target_uname= " replace this with the output of the previous command "
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~ /powerlevel10k
GITSTATUS_CACHE_DIR= " $HOME " /powerlevel10k/gitstatus/usrbin ~ /powerlevel10k/gitstatus/install -f -s " ${target_uname % * } " -m " ${target_uname #* } "
~/powerlevel10k
從連接到 Internet 的電腦複製到未存取 Internet 的電腦。source ~/powerlevel10k/powerlevel10k.zsh-theme
加入沒有 Internet 存取的機器上的~/.zshrc
中: echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
~/.zshrc
設定了ZSH_THEME
,請刪除該行。 sed -i.bak ' /^ZSH_THEME=/d ' ~ /.zshrc
若要更新,請刪除兩台電腦上的~/powerlevel10k
並重複步驟 1-3。
尋求協助和報告錯誤的最佳方法是提出問題。
Gitter 是另一個選擇。
如果其他方法都失敗,請發送電子郵件至 [email protected]。
如有必要,請使用此 PGP 金鑰加密您的通訊。
Powerlevel10k 定義了提示符,僅此而已。它設定提示相關的選項以及參數PS1
和RPS1
。
螢幕截圖中反白顯示區域內的所有內容均由 Powerlevel10k 產生。 Powerlevel10k 無法控制這些區域以外的終端內容或顏色。
Powerlevel10k 不影響:
ls
使用的顏色。git
命令的行為。PS1
和RPS1
以外的參數。p10k
。 # Add powerlevel10k to the list of Oh My Zsh themes.
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM /themes/powerlevel10k
# Replace ZSH_THEME="powerlevel9k/powerlevel9k" with ZSH_THEME="powerlevel10k/powerlevel10k".
sed -i.bak ' s/powerlevel9k/powerlevel10k/g ' ~ /.zshrc
# Restart Zsh.
exec zsh
p10k configure
並選擇您喜歡的提示樣式。有關的:
是的。請參閱 zsh-bench 或與 Powerlevel9k 和 Spaceship 的直接比較。
請參閱即時提示以了解即時提示。本節介紹如何啟用和配置它,並列出您應該注意的注意事項。
可以透過p10k configure
或透過在~/.zshrc
頂部手動新增以下程式碼片段來啟用即時提示:
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
逐字複製這些行很重要。不要用其他東西替換source
,不要呼叫zcompile
,不要重定向輸出等。
啟用即時提示後,在 Zsh 初始化期間,標準輸入將重定向到/dev/null
,並且帶有標準錯誤的標準輸出將重定向到臨時檔案。一旦 Zsh 完全初始化,標準檔案描述符將被恢復並列印出臨時檔案的內容。
使用即時提示時,您應該仔細檢查 Zsh 啟動時出現的任何輸出,因為它可能表示初始化已被即時提示更改,甚至可能被破壞。可能需要控制台輸入的初始化程式碼(例如要求金鑰環密碼或[y/n]確認)必須移至~/.zshrc
中即時提示序言上方。僅列印到控制台但從不從中讀取的初始化程式碼將在即時提示下正常工作,儘管通常具有顏色的輸出可能會顯示為無色。您可以保留它,抑制輸出,或將其移至即時提示前導碼上方。
以下是~/.zshrc
的範例,在啟用即時提示時會中斷:
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
keychain id_rsa --agents ssh # asks for password
chatty-script # spams to stdout even when everything is fine
# ...
固定版本:
keychain id_rsa --agents ssh # moved before instant prompt
# OK to perform console I/O before this point.
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
# From this point on, until zsh is fully initialized, console input won't work and
# console output may appear uncolored.
chatty-script > /dev/null # spam output suppressed
# ...
如果POWERLEVEL9K_INSTANT_PROMPT
未設定或設定為verbose
,Powerlevel10k 在初始化期間偵測到控制台輸出時將列印警告,以引起對潛在問題的注意。您可以使用POWERLEVEL9K_INSTANT_PROMPT=quiet
消除此警告(不抑制控制台輸出)。如果~/.zshrc
中的某些初始化程式碼列印到控制台並且無法將其移至即時提示前導碼上方或抑制其輸出,則建議這樣做。您可以使用POWERLEVEL9K_INSTANT_PROMPT=off
完全停用即時提示。如果即時提示破壞了 Zsh 初始化並且您不知道如何修復它,請執行此操作。
可以透過執行p10k configure
並在即時提示畫面上選擇適當的選項來變更POWERLEVEL9K_INSTANT_PROMPT
的值。或者,您可以在現有的~/.p10k.zsh
中搜尋POWERLEVEL9K_INSTANT_PROMPT
並在那裡更改其值。
注意:即時提示需要 Zsh >= 5.4。即使使用舊版的 Zsh 也可以啟用它,但它不會執行任何操作。
常問問題:
如果您啟用了即時提示,則~/.zshrc
的頂部應該有這些行:
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
要初始化 direnv,您需要在該區塊上方添加一行,在其下方添加一行。
(( ${+commands[direnv]} )) && emulate zsh -c " $( direnv export zsh ) "
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
(( ${+commands[direnv]} )) && emulate zsh -c " $( direnv hook zsh ) "
相關:使用即時提示時如何匯出 GPG_TTY?
您可以像這樣在~/.zshrc
中的任何位置匯出GPG_TTY
:
export GPG_TTY= $TTY
無論您是否使用即時提示,這都有效。即使您不使用 powerlevel10k,它也可以工作。作為額外的好處,它比常用的export GPG_TTY=$(tty)
快得多。
相關:使用即時提示時如何初始化 direnv?
當使用 Lean、Classic 或 Rainbow 風格時,Git 狀態可能如下所示:
feature:master wip ⇣42⇡42 ⇠42⇢42 *42 merge ~42 +42 !42 ?42
象徵 | 意義 | 來源 |
---|---|---|
feature | 當前分支;如果不在分支上,則替換為#tag 或@commit | git status --ignore-submodules=dirty |
master | 遠端追蹤分支;僅在與本地分支不同時顯示 | git rev-parse --abbrev-ref --symbolic-full-name @{upstream} |
wip | 最新提交的摘要包含“wip”或“WIP” | git show --pretty=%s --no-patch HEAD |
= | 與遙控器保持最新狀態(既不超前也不落後) | git rev-list --count HEAD...@{upstream} |
⇣42 | 遠端背後有這麼多提交 | git rev-list --right-only --count HEAD...@{upstream} |
⇡42 | 在遠程之前有這麼多提交 | git rev-list --left-only --count HEAD...@{upstream} |
⇠42 | 推送遠端背後的這麼多提交 | git rev-list --right-only --count HEAD...@{push} |
⇢42 | 在推送遠端之前有這麼多提交 | git rev-list --left-only --count HEAD...@{push} |
*42 | 這麼多藏品 | git stash list |
merge | 儲存庫狀態 | git status --ignore-submodules=dirty |
~42 | 這麼多合併衝突 | git status --ignore-submodules=dirty |
+42 | 這麼多階段性的變化 | git status --ignore-submodules=dirty |
!42 | 這麼多未上演的變化 | git status --ignore-submodules=dirty |
?42 | 這麼多未跟蹤的文件 | git status --ignore-submodules=dirty |
─ | 暫存、未暫存或未追蹤文件的數量未知 | echo $POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY 或git config --get bash.showDirtyState |
相關:如何變更 Git 狀態的格式?
若要變更 Git 狀態的格式,請開啟~/.p10k.zsh
,搜尋my_git_formatter
並編輯其原始碼。
相關:Git狀態中的不同符號意味著什麼?
$HOME/.git
中的 Git 狀態未在提示中顯示?當使用 Lean、Classic 或 Rainbow 風格時, ~/.p10k.zsh
包含以下參數:
# Don't show Git status in prompt for repositories whose workdir matches this pattern.
# For example, if set to '~', the Git repository at $HOME/.git will be ignored.
# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'.
typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN= ' ~ '
若要在提示中查看$HOME/.git
的 Git 狀態,請開啟~/.p10k.zsh
並刪除POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN
。
tl;dr: 當提示中的 Git 狀態顯示為灰色時,表示 Powerlevel10k 目前正在背景計算最新的 Git 狀態。計算完成後,提示將自動刷新。
當您的目前目錄位於 Git 儲存庫中時,Powerlevel10k 會在每個指令後計算最新的 Git 狀態。如果儲存庫很大,或者機器很慢,則此計算可能會花費相當多的時間。如果花費的時間超過 10 毫秒(可透過POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS
配置),Powerlevel10k 將以灰色顯示最後一個已知的 Git 狀態,並繼續在背景計算最新的 Git 狀態。計算完成後,Powerlevel10k 會用新資訊刷新提示,這次是彩色的 Git 狀態。
使用Rainbow樣式時,Git 狀態在仍在計算時顯示為灰底黑字。根據終端調色板,這可能難以閱讀。在這種情況下,您可能需要將背景顏色變更為更淺的顏色以提高對比。為此,請開啟~/.p10k.zsh
,搜尋POWERLEVEL9K_VCS_LOADING_BACKGROUND
,如果已註解掉則取消註釋,然後變更值。
typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=244
輸入source ~/.p10k.zsh
將變更套用到目前 Zsh 會話。
相關:如何更改提示顏色?
使用 Lean、Classic 或 Rainbow 風格時,當您以 root 身分或透過 SSH 登入時,提示會顯示username@hostname
。當您以普通使用者身分登入本機時,顯示username
或hostname
沒有什麼價值。因此,提示中缺少username@hostname
表示您正在本機工作並且不是 root。不過,您可以更改它。
打開~/.p10k.zsh
。在頂部附近,您可以看到最重要的參數,這些參數定義了提示中顯示的段。所有通常有用的提示段都列在其中。其中一些已啟用,另一些則被註解掉。其中之一是您感興趣的。
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
...
context # user@hostname
...
)
搜尋context
以尋找配置中列出特定於該提示段的參數的部分。您應該看到以下幾行:
# Don't show context unless running with privileges or in SSH.
# Tip: Remove the next line to always show context.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
如果您按照提示操作並刪除(或註解掉)最後一行,您將始終在提示中看到username@hostname
。您可以透過調整附近參數的值將格式變更為僅username
,或變更顏色。有很多評論可以幫助您導航。
您也可以將context
移至POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
中的不同位置,甚至移至POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
。
提示段可以配置為僅當您鍵入的目前命令呼叫相關工具時才顯示。
# Show prompt segment "kubecontext" only when the command you are typing invokes
# invokes kubectl, helm, or kubens.
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND= ' kubectl|helm|kubens '
p10k configure
建立的組態可能包含此類參數。若要自訂何時顯示不同的提示段,請開啟~/.p10k.zsh
,搜尋SHOW_ON_COMMAND
並刪除這些參數或變更它們的值。
您也可以在~/.zshrc
中定義一個函數,以在「always」和「on command」之間切換提示段的顯示。這類似於 kube-ps1 中的kubeon
/ kubeoff
。
function kube-toggle() {
if (( ${+POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND} )) ; then
unset POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND
else
POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND= ' kubectl|helm|kubens '
fi
p10k reload
if zle ; then
zle push-input
zle accept-line
fi
}
透過輸入kube-toggle
呼叫此函數。您也可以透過在~/.zshrc
中新增另外兩行來將其綁定到鍵:
zle -N kube-toggle
bindkey ' ^] ' kube-toggle # ctrl-] to toggle kubecontext in powerlevel10k prompt
您可以變更終端使用的調色盤或透過 Powerlevel10k 設定參數設定顏色。
具體如何更改終端調色板(也稱為配色方案或主題)取決於您使用的終端類型。查看終端機的設定/首選項或查閱文件。
當您變更終端調色板時,它通常只會影響前 16 種顏色,編號從 0 到 15。輸入p10k configure
並選擇Rainbow 、 Lean → 8 色或Pure → Original 。其他樣式使用編號較高的顏色,因此它們在任何終端調色板中看起來都相同。
開啟~/.p10k.zsh
,搜尋「顏色」、「前景」和「背景」並變更適當參數的值。例如,將time
提示段的前景設定為亮紅色的方法如下:
typeset -g POWERLEVEL9K_TIME_FOREGROUND=160
顏色使用 0 到 255 之間的數字指定。許多終端還支援透過調色板(也稱為配色方案或主題)自訂這些顏色。 16 到 255 之間的顏色看起來總是一樣的。
輸入source ~/.p10k.zsh
將變更套用到目前 Zsh 會話。
若要查看不同編號顏色在終端機中的外觀,請執行以下命令:
for i in {0..255} ; do print -Pn " %K{ $i } %k%F{ $i } ${(l : 3 :: 0 : )i} %f " ${ ${(M)$((i % 6)) :# 3} : + $' n ' } ; done
如果您的終端支援真彩色,除了編號顏色之外,您還可以使用#RRGGBB
格式的 24 位元顏色。
typeset -g POWERLEVEL9K_TIME_FOREGROUND= ' #FF0000 '
有關的:
預設情況下,VSCode 終端可以任意用不同的顏色替換您選擇的前景色。可以在 VSCode 設定中關閉此行為。
Powerlevel10k 使用 gitstatus 作為vcs
提示字元後面的後端; gitstatus 產生gitstatusd
和zsh
。有關詳細信息,請參閱 gitstatus。 Powerlevel10k 還可以產生zsh
來執行計算而不阻塞提示。為了避免安全隱患,這些後台程序不會被不同的互動式 shell 共用。當父zsh
進程終止或執行exec(3)
時,它們會自動終止。
不,無論您採用什麼配置,Powerlevel10k 總是很快。如果您在使用 Powerlevel10k 時出現明顯的提示延遲,請提出問題。
是的。請參閱 zsh-bench。
經過 powerlevel9k#1170 中為期一周的討論後,Powerlevel10k 於 2019 年 3 月從 Powerlevel9k 分叉出來。 Powerlevel9k已經是一個成熟的項目,擁有龐大的用戶群,發布週期以月為單位。 Powerlevel10k 被剝離出來,以更快的速度迭代效能改進和新功能。
Powerlevel9k 和 Powerlevel10k 是獨立的專案。使用其中一個時,不應安裝另一個。應針對您實際使用的項目提出問題。沒有人在這兩個儲存庫中擁有提交權。提交給 Powerlevel9k 儲存庫的所有錯誤修復和新功能都已移植到 Powerlevel10k。
隨著時間的推移,Powerlevel10k 中的幾乎所有程式碼都已重寫。目前 Powerlevel9k 和 Powerlevel10k 的實作之間沒有有意義的重疊。
Powerlevel10k 致力於無限期地保持與所有配置的向後相容性。此承諾涵蓋 Powerlevel9k 認可的所有設定參數(請參閱 Powerlevel9k 相容性)以及只有 Powerlevel10k 理解的其他參數。為了保持一致性,Powerlevel10k 中所有參數的名稱均以POWERLEVEL9K_
開頭。
幾乎。有一些差異。
git
vcs 後端。如果您需要svn
和hg
,請將它們新增至POWERLEVEL9K_VCS_BACKENDS
。這些後端在 Powerlevel10k 中尚未最佳化,因此啟用它們會使提示速度非常慢。POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY=true
。POWERLEVEL9K_MODE
。 Powerlevel9k 會忽略此參數,但 Powerlevel10k 會尊重此參數。如果您希望提示在 Powerlevel10k 中看起來與在 Powerlevel9k 中相同,請刪除POWERLEVEL9K_MODE
。ZLE_RPROMPT_INDENT
。因此,與 Powerlevel9k 相比,Powerlevel10k 中的右側提示符號末端可以有一個額外的空格。如果您不需要該空間,請設定ZLE_RPROMPT_INDENT=0
。故障排除中的更多詳細資訊。POWERLEVEL9K_LEGACY_ICON_SPACING=true
以獲得與 Powerlevel9k 中相同的間距。故障排除中的更多詳細資訊。如果您在從 Powerlevel9k 切換到 Powerlevel10k 時發現提示外觀有任何其他變化,請提出問題。
有多少人,關於什麼是最佳提示的觀點就有多少。這主要取決於個人喜好。然而,不同的選擇有一些隱藏的含義。
Pure 風格是 Pure Zsh 主題的精確複製。它的存在是為了簡化該主題使用者的遷移。除非您是其中之一,否則請選擇精益風格而不是純粹風格。
如果您想要將提示顏色限制為選取的終端調色板(例如Solarized Dark ),請使用Rainbow 、 Lean → 8 顏色或Pure → Original 。其他樣式使用固定顏色,因此在任何終端調色板中看起來都相同。
除 Pure 之外的所有樣式都可以選擇使用ASCII字元集。提示看起來不太漂亮,但會在所有字體和所有語言環境中正確呈現。
如果啟用瞬時提示,請利用兩行提示。您將獲得用於鍵入命令的額外空間的好處,而不會出現回滾密度降低的常見缺點。讓所有命令從相同的偏移量開始也很好。
同樣,如果啟用瞬態提示,稀疏提示(提示前有一個空行)是一個不錯的選擇。
如果您使用 vi 鍵盤映射,請選擇其中包含prompt_char
的提示(在精靈中顯示為綠色❯
)。此符號依 vi 模式而變化: ❯
、 ❮
、 V
、 ▶
分別表示插入、指令、視覺和替換模式。當命令失敗時,該符號變為紅色。精益風格總是包含prompt_char
。彩虹和經典款式僅在沒有左側框架的兩行配置中具有此功能。
如果您重視水平空間或喜歡極簡主義美學:
注意:您可以根據需要多次執行設定精靈。輸入p10k configure
嘗試新的提示樣式。
使用這個配置。
您可以下載它,另存為~/.p10k.zsh
並從source ~/.p10k.zsh
~/.zshrc
.p10k.zsh ,或直接從克隆的powerlevel10k
存儲庫獲取p10k-robbyrussell.zsh
。
不會。指令完成後,錯誤狀態會被知曉,但無法再更新該指令的提示。這就是為什麼每個命令的錯誤狀態都會反映在下一個提示中。
有關詳細信息,請參閱 /r/zsh 上的這篇文章。
Zsh 5.3 或更高版本應該可以工作。快速啟動需要 Zsh >= 5.4。
所有螢幕截圖和動畫 gif 均在 GNOME 終端機中使用建議的字體和具有自訂背景顏色的 Tango Dark 調色板進行記錄( #171A1B
而不是#2E3436
- 兩倍暗)。
語法突出顯示(如果存在)由 zsh-syntax-highlighting 提供。
推薦的字體是許多人的產物。它的起源是Bitstream Vera Sans Mono ,它催生了Menlo ,而 Menlo 又催生了Meslo 。最後, Meslo中添加了額外的字形,其中的腳本來自 Nerd Fonts。最終字體是根據 Apache 授權條款發布的。
MesloLGS NF 字體可以使用以下命令重新建立(需要git
和docker
):
git clone --depth=1 https://github.com/romkatv/nerd-fonts.git
cd nerd-fonts
./build ' Meslo/S/* '
如果一切順利,四個ttf
檔案將出現在./out
中。
目前打包和分發 Powerlevel10k 並不容易,也不建議這樣做。當新版本的 Powerlevel10k 發佈時,沒有任何說明可以讓您輕鬆更新軟體包。這種情況將來可能會改變,但不會很快。
[oh-my-zsh] theme 'powerlevel10k/powerlevel10k' not found
source ~/.zshrc
後會發生奇怪的事情[oh-my-zsh] theme 'powerlevel10k/powerlevel10k' not found
打開終端機或手動啟動 zsh 時,您可能會遇到以下錯誤訊息:
[oh-my-zsh] theme 'powerlevel10k/powerlevel10k' not found
typeset -p P9K_VERSION
檢查Powerlevel10k是否已載入。typeset -p P9K_VERSION
成功並列印類似typeset P9K_VERSION=1.19.14
內容(版本可能不同),請從~/.zshrc
中刪除以下行: ZSH_THEME= " powerlevel10k/powerlevel10k "
typeset -p P9K_VERSION
失敗並出現錯誤typeset: no such variable: P9K_VERSION
,請執行以下指令: git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM :- $HOME / .oh-my-zsh / custom} /themes/powerlevel10k
exec zsh
重新啟動 Zsh。如果它看起來像普通的?
,這很正常。這意味著當前 Git 儲存庫中有未追蹤的檔案。輸入git status
查看這些檔案。您可以變更此符號或完全停用未追蹤檔案的顯示。在~/.p10k.zsh
中搜尋untracked files
。
常見問題:Git 狀態中的不同符號代表什麼意思?
如果您的終端字體缺少一些字形,您也可能會在提示中看到一個看起來很奇怪的問號。查看圖示、字形或電力線符號不呈現。
重新啟動終端,安裝建議的字型並執行p10k configure
。
截圖有三個缺陷。由左至右:
Zsh 主題對終端內容沒有精確到像素的控制。您在螢幕上看到的所有內容都是由等寬字元組成的。白色電力線提示段由白色背景上的文字組成,後面跟著 U+E0B0(向右的三角形)。
如果 Powerlevel10k 提示在電力線符號周圍有缺陷,您將看到所有電力線主題(Agnoster、Powerlevel9k、Powerline 等)完全相同的缺陷
您可以嘗試以下幾種方法來解決這些缺陷:
更激進的解決方案是改用無背景的提示樣式。鍵入p10k configure
並選擇Lean 。這種款式具有現代輕巧的外觀。作為獎勵,它不會受到影響電力線風格提示的渲染缺陷的影響。
輸入echo 'u276F'
。如果您收到錯誤訊息“zsh:字元不在範圍內”,則您的區域設定不支援 UTF-8。你需要修復它。如果您透過 SSH 執行 Zsh,請參閱此內容。如果您在本機上執行 Zsh,請 Google「在您的作業系統中設定 UTF-8 區域設定」。
輸入echo 'u276F'
。如果您收到錯誤訊息“zsh:字元不在範圍內”,請參閱上一節。
如果echo
指令列印❯
但遊標仍位於錯誤的位置,請安裝建議的字型並執行p10k configure
。
如果這沒有幫助,請在~/.zshrc
底部新增unset ZLE_RPROMPT_INDENT
。
還有問題嗎?執行以下命令來診斷問題:
() {
emulate -L zsh
setopt err_return no_unset
local text
print -rl -- ' Select a part of your prompt from the terminal window and paste it below. ' ' '
read -r ' ?Prompt: ' text
local -i len= ${(m) # text}
local frame= " +- ${(pl. $len ..-.) :- } -+ "
print -lr -- $frame " | $text | " $frame
}
+------------------------------+
| romka@adam ✓ ~/powerlevel10k |
+------------------------------+
如果命令的輸出與提示的每個部分(左和右)對齊,則表示主題或配置中存在錯誤。使用此命令來診斷它:
print -rl -- ${(eq+)PROMPT} ${(eq+)RPROMPT}
在輸出中找出%{...%}
和反斜線轉義符。如果有的話,他們很可能是罪魁禍首。如果您遇到困難,請提出問題。
+-----------------------------+
| romka@adam ✓ ~/powerlevel10k |
+-----------------------------+
這通常是由於終端錯誤或配置錯誤導致將寬度不明確的字元列印為雙寬度而不是單寬度。比如這個問題。
+------------------------------+
| romka@adam ✓~/powerlevel10k |
+------------------------------+
請注意,此提示與原始提示不同,因為它在複選標記後缺少一個空格。
這可能是由 macOS 中的低階錯誤引起的。看到這個問題。
如果提示包含在 Unicode 標準中指定為「寬」的字形,並且您的終端錯誤地將它們顯示為非寬,也可能會發生這種情況。受此限制的終端包括 Konsole、Hyper 和整合的 VSCode 終端。解決方案是使用不同的終端機或從提示符號中刪除所有寬字形。
+--------------------------------+
| romka@adam ✓ ~/powerlevel10k |
+--------------------------------+
這可能是由於區域設定配置錯誤造成的。看到這個問題。
看看遊標位置不對。
看看遊標位置不對。
當 Powerlevel10k 啟動時,如果沒有定義POWERLEVEL9K_*
參數,它會自動執行p10k configure
。根據您的提示樣式選擇,配置精靈會建立~/.p10k.zsh
,其中包含一堆POWERLEVEL9K_*
參數,並向~/.zshrc
新增一行以取得此檔案。下次啟動 Zsh 時,設定精靈不應自動執行。如果是這樣,這意味著~/.zshrc
的評估在到達來源~/.p10k.zsh
的行之前提前終止。這種情況最常發生是由於~/.zshrc
中的語法錯誤。這些錯誤被配置精靈畫面隱藏,因此您不會注意到它們。退出配置精靈時,尋找錯誤訊息。您也可以使用POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true zsh
啟動 Zsh,而不自動執行設定精靈。一旦您看到錯誤,請修復~/.zshrc
以消除它們。
如果 Zsh 版本低於 5.7.1 或COLORTERM
環境變數既不是24bit
也不是truecolor
,設定精靈將不會提供具有 Snazzy 配色方案的 Pure 風格。修復:安裝 Zsh >= 5.7.1 並使用支援真彩色的終端。使用print -P '%F{#ff0000}red%f'
進行驗證。
如果終端可顯示的顏色少於 256 種,配置精靈會預選 8 種顏色的 Lean 風格。所有其他樣式至少需要 256 種顏色。修復:使用支援 256 色的終端並確保TERM
環境變數設定正確。使用print $terminfo[colors]
進行驗證。
如果系統上沒有 UTF-8 區域設置,設定精靈將不會提供使用 Unicode 字元的提示樣式。修復:安裝 UTF-8 語言環境。使用locale -a
進行驗證。
設定精靈可能不提供 Unicode 提示樣式的另一個情況是停用MULTIBYTE
shell 選項時。修復:啟用MULTIBYTE
選項,或不停用它(預設在 Zsh 中啟用此選項)。使用print -r -- ${options[MULTIBYTE]}
進行驗證。
當啟用MULTIBYTE
且 UTF-8 語言環境可用時,設定精靈詢問的前幾個問題將評估終端字體的功能。如果您的答案表明某些字形無法正確呈現,配置精靈將不會提供使用它們的提示樣式。修復:重新啟動終端並安裝建議的字型。透過執行p10k configure
並檢查所有字形是否正確渲染來進行驗證。
下載建議的字型後,您可以像安裝任何其他字型一樣安裝它。谷歌「如何在作業系統上安裝字型」。
tl;dr:將ZLE_RPROMPT_INDENT=0
和POWERLEVEL9K_LEGACY_ICON_SPACING=true
加到~/.zshrc
以獲得與 Powerlevel9k 相同的提示間距。
當將 Powerlevel10k 與 Powerlevel9k 設定一起使用時,您可能會在提示中出現額外的空格。這些有兩種口味。
tl;dr:將ZLE_RPROMPT_INDENT=0
加到~/.zshrc
以消除該空間。
來自 Zsh 文件:
ZLE_RPROMPT_INDENT <S>
如果設置,則用於在行編輯器中由
RPS1
或RPROMPT
給出的右側提示符的右側與螢幕的右側之間進行縮排。如果未設置,則使用值1
。通常,這將用於將該值設為
0
,以便提示與螢幕右側齊平。
Powerlevel10k 尊重此參數。如果您設定ZLE_RPROMPT_INDENT=1
(或不設定它,這與將其設為1
是一樣的),您將在右側提示字元右側看到一個空白區域。如果您設定ZLE_RPROMPT_INDENT=0
,您的提示將轉到終端的邊緣。這就是它在除 Powerlevel9k 之外的每個主題中的工作原理。
Powerlevel9k 問題:powerlevel9k#1292。它已在 Powerlevel9k 的開發分支中修復,但尚未在master
上修復。
將ZLE_RPROMPT_INDENT=0
加到~/.zshrc
以獲得與 Powerlevel9k 相同的提示右邊緣間距。
注意: Zsh 的多個版本都存在當您設定ZLE_RPROMPT_INDENT=0
時會觸發的錯誤。當使用電力線提示樣式時,Powerlevel10k 可以解決這些錯誤。如果您發現提示中出現視覺偽影或遊標位置錯誤,請嘗試從~/.zshrc
中刪除ZLE_RPROMPT_INDENT
。
tl;dr:將POWERLEVEL9K_LEGACY_ICON_SPACING=true
加到~/.zshrc
以獲得與 Powerlevel9k 相同的圖示周圍間距。
Powerlevel9k 中圖示周圍的間距不一致。
這種不一致是一個持續的煩惱來源,因此它在 Powerlevel10k 中得到了修復。您可以將POWERLEVEL9K_LEGACY_ICON_SPACING=true
加到~/.zshrc
以獲得與 Powerlevel9k 相同的圖示周圍間距。
注意:使用p10k configure
時定義POWERLEVEL9K_LEGACY_ICON_SPACING
不是個好主意。
source ~/.zshrc
後會發生奇怪的事情無論您是否使用 Powerlevel10k,運行source ~/.zshrc
幾乎總是一個壞主意。此命令可能會導致隨機錯誤、行為不當的程式碼以及 Zsh 逐漸變慢。
如果您對~/.zshrc
或其來源的檔案進行了更改,請重新啟動 Zsh 以套用它們。最可靠的方法是輸入exit
,然後啟動新的 Zsh 會話。您也可以使用exec zsh
。雖然不完全等同於完全 Zsh 重新啟動,但此命令比source ~/.zshrc
可靠得多。
輸入source ~/.zshrc
後會發生奇怪的事情。
如果安裝說明不適合您,請嘗試停用當前主題(這樣您最終就沒有主題),然後手動安裝 Powerlevel10k。
~/.zshrc
並刪除設定ZSH_THEME
行。它可能看起來像這樣: ZSH_THEME="powerlevel9k/powerlevel9k"
。~/.zshrc
並刪除引用目前主題的zplug
指令。例如,如果您目前正在使用 Powerlevel9k,請尋找zplug bhilburn/powerlevel9k, use:powerlevel9k.zsh-theme
。~/.zpreztorc
並在其中關閉zstyle :prezto:module:prompt theme off
。刪除任何其他設定theme
的指令,例如zstyle :prezto:module:prompt theme powerlevel9k
。~/.zshrc
並刪除設定antigen theme
行。它可能看起來像這樣: antigen theme powerlevel9k/powerlevel9k
。git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~ /powerlevel10k
echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
這種安裝方法不會使任何事情變慢或低於標準。
在彩虹風格中,目前工作目錄以藍色背景上的亮白色文字顯示。白色是固定的,看起來總是一樣的,但“藍色”的外觀是由終端調色板定義的。如果它很亮,可能很難看清上面的白色文字。
有幾種方法可以解決這個問題。
p10k configure
並選擇更具可讀性的提示樣式。POWERLEVEL9K_DIR_ANCHOR_BOLD
正在尋找的參數稱為POWERLEVEL9K_DIR_BACKGROUND
、 POWERLEVEL9K_DIR_FOREGROUND
、 POWERLEVEL9K_DIR_SHORTENED_FOREGROUND
、 POWERLEVEL9K_DIR_ANCHOR_FOREGROUND
您可以在~/.p10k.zsh
中找到它們。相關:VSCode 終端中的前景色不正確。
預設情況下,VSCode 終端可以任意用不同的顏色替換您選擇的前景色。可以在 VSCode 設定中關閉此行為。
當您水平來回調整終端機視窗大小幾次時,您可能會看到這張醜陋的圖片。
tl;dr:當終端機在調整大小時重排 Zsh 提示時,就會出現此問題。它並非特定於 Powerlevel10k。請參閱緩解措施。
注意:本節曾經說過該問題是由 Zsh 中的錯誤引起的。雖然在很多情況下確實可以透過修改Zsh來避免該問題,但這種方式並不能完全解決問題。因此,將責任歸咎於 Zsh 是不公平的。
當調整終端視窗大小時,目前提示符號的開頭與遊標(以下稱為VD
)之間的垂直距離發生變化時,就會出現此問題。
當終端機視窗水平縮小時,終端機有兩種方法處理不再適合的長行:回流或截斷。
收縮前的終端內容:
縮小時終端會重排文字:
終端在收縮時截斷文字:
回流策略可以改變終端內容的高度。如果這樣的內容恰好在當前提示符的開頭和遊標之間,Zsh 將在錯誤的行上列印提示符。截斷策略永遠不會改變終端內容的高度,因此不會觸發此問題。
讓我們看看這個問題是如何以慢動作表現出來的。我們首先啟動zsh -f
並貼上以下程式碼:
function pause() { read -s }
functions -M pause 0
reset
print -l {1..3}
setopt prompt_subst
PROMPT= $' ${$((pause()))+}left>${(pl.$((COLUMNS-12))..-.)}<right n > '
當PROMPT
展開時,它會呼叫pause
來讓我們觀察終端的狀態。這是初始狀態:
Zsh 追蹤相對於目前提示符號開頭的遊標位置。在這種情況下,它知道遊標在下面一行。當我們縮小終端機視窗時,它看起來像這樣:
此時終端機向Zsh發送SIGWINCH
以通知其終端尺寸的變化。請注意,該訊號是在終端的內容重排之後發送的。
當 Zsh 收到SIGWINCH
時,它會嘗試刪除目前提示並重新列印。它轉到它認為當前提示符所在的位置——遊標上方一行(!)——擦除後面的所有終端內容並在那裡列印重新展開的提示符。但是,調整大小後,提示不再是遊標上方的一行。上面有兩行! Zsh 最終列印新提示的行太低。
在這種情況下,我們最終得到了不需要的垃圾內容,因為VD
增加了。當您使終端視窗變寬時, VD
也會減小,這將導致新的提示列印得比預期更高,可能會刪除該過程中的有用內容。
以下是縮小終端視窗增加VD
的其他幾個範例。
prompt_subst
。請注意,遊標位於提示行下方(按ESC-ENTER即可到達那裡)。prompt_subst
,沒有正確的提示。由於命令列環繞,終端縮小時VD
必然會增加。 此 Zsh 補丁修復了某些終端上的問題。該補丁背後的想法是在打印提示符之前使用sc
(保存遊標)終端功能,並在需要刷新提示符時使用rc
(恢復遊標)將遊標移回原始位置。
此補丁僅適用於在調整終端視窗大小時將儲存的遊標位置與文字一起回流的終端。此修補程式對於在調整大小時不重排文字的終端(修補和未修補的Zsh 均正常運作)以及重排文字但不重排已儲存的遊標位置的終端(修補和未修補的Zsh 重繪提示位於相同的錯誤位置)沒有明顯影響)。換句話說,該補丁修復了某些終端上的大小調整問題,同時保持其他終端上的行為不變。
有兩種修補 Zsh 的替代方法,乍看之下似乎有效,但實際上無效:
u7
終端功能取代sc
來查詢目前遊標位置,然後使用cup
返回到該位置。這不起作用,因為當文字重排時,當前提示開始的絕對位置會發生變化。VD
。這是行不通的,因為 Zsh 不知道終端是重排文字還是截斷文字。如果 Zsh 能夠以某種方式知道終端回流文本,那麼這種方法仍然無法在不斷回流文本並在調整視窗大小時快速發出SIGWINCH
的終端上工作。在這種環境中,真實的終端尺寸與 Zsh 認為的尺寸不同步。該補丁沒有進入上游 Zsh 的預計時間。參見討論。
對於這個問題有一些緩解方案。
~/.p10k.zsh
中定義POWERLEVEL9K_TERM_SHELL_INTEGRATION=true
啟用 Powerlevel10k 中的終端 shell 整合。POWERLEVEL9K_SHOW_RULER=false
停用標尺。POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '
停用提示連線。POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=''
、 POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=''
和POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=''
停用右幀。POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()
。只有當遊標位於最後一個提示行的右側提示下方時,才會導致調整大小問題。這種情況並不常見,因此您可能希望在POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
中保留一些元素,前提是它們都不被newline
繼承。當使用具有非等寬字體的 Konsole 時,圖示可能會在右側被切斷。這裡的「非等寬」是指任何字形比單列寬的字體,或比 Unicode 標準中指定為「寬」字形的兩列寬的字體。
螢幕截圖中的最後一行顯示了被切斷的 Arch Linux 標誌。
針對此問題有多種緩解方案。
os_icon
提示段的內容被截斷,請開啟~/.p10k.zsh
,搜尋POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION
並進行以下更改: typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION= ' ${P9K_CONTENT} ' # extra space at the end
~/.p10k.zsh
: typeset -g POWERLEVEL9K_LINUX_ARCH_ICON= ' Arch ' # plain "Arch" in place of a logo
os_icon
提示段的內容被截斷,請開啟~/.p10k.zsh
並從POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
和POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
中刪除os_icon
。注意:Konsole 不正式支援非等寬字體。
某些字體在粗體字體中具有不正確的點圖示。有兩種方法可以解決此問題。
~/.p10k.zsh
,搜尋POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION
並從其值中刪除%B
。 typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION= ' ${P9K_CONTENT} ' # not bold
Powerlevel10k 使用 gitstatusd 檢查 git 儲存庫的狀態。該專案依賴 libgit2 庫,該庫在實作上存在一些差距。在某些情況下,這可能會導致 git 儲存庫的真實狀態(由git status
反映)與 Powerlevel10k 提示字元中顯示的內容之間存在差異。
最值得注意的是,libgit2 不支援skipHash
。如果您在提示中看到不正確的 git status,請執行git config -l
並檢查是否啟用了skipHash
。如果是,請考慮停用它。請記住,當啟動某些 git 功能(例如manyFiles
時,可能會隱含啟用skipHash
。