Featured image of post 好物推荐 - powerlevel10k

好物推荐 - powerlevel10k

一款漂亮的zsh主题

背景

现在基本很多Linux/macOS版本都已经默认自带zsh或已经正式切换到zsh。先不说zshshell语法上的改进与提升,单其在shell交互中的优秀(如自动补全)及插件的丰富,就让人对其爱不释手。

说到插件,配置zsh时,我们首先就会想到将其弄得漂漂亮亮的。

今天就给大家介绍一款zsh主题插件 - powerlevel10k

安装

既然是zsh主题插件,自然支持各种zsh插件管理软件,比如[Oh My Zsh](https://ohmyz.sh/)powerlevel10k支持各种管理软件安装,可参考官方文档。如果你刚好在本地安装了其中一款管理软件,可参考官方文档进行安装。

这里我们选择手动安装,其实也是非常简单的。(个人不太喜欢插件管理软件,开源软件bug多,弄好之后不太可能再去改变,插件管理就没必要了。)

1
2
3
4
5
cd ~/.zsh
git clone https://github.com/romkatv/powerlevel10k.git
cd powerlevel10k
# 删除不需要的文件
make minify

配置

powerlevel10k的配置是非常简单的,基本已经实现自动化。只要将如下几行代码加入~/.zshrc,然后再次打开终端就会自动打开引导配置界面。

1
2
3
4
5
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
if [ -d ~/.zsh/powerlevel10k ]; then
    [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
    source ~/.zsh/powerlevel10k/powerlevel10k.zsh-theme 
fi

不用担心你的英文不够好,整个引导配置过程都是图文并茂的,如下图所示。这种引导式配置界面在开源软件中真的很少看到。

IMG_20231217_173320

按照提示选择自己的样式,运行完后会自动生成配置文件,不需要我们手动去修改,是不是很 Nice。如果你想重新配置powerlevel10k,只需要运行p10k configure即可。

定制

这么多样式,总有一款是适合你的。但是如果没有呢,那就只有自己定制了。

比如,如下图所示,默认git信息显示在路径后面,这样一来,当我们改变路径时,界面就会跳动的,这很不符合我的需求。

powerlevel10k的配置虽然不需要我的手动修改,但并不代表不可以。通过查看powerlevel10k的配置文件~/.p10k.zsh,可以发现默认提示符的配置为:

1
2
3
4
5
6
  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
    os_icon                 # os identifier
    dir                     # current directory
    vcs                     # git status
    prompt_char             # prompt symbol
  )

看来修改起来很简单,只需要交换一下dirvcs的顺序,直接在.zshrc中,加载完.p10k.zsh之后,添加一行:

1
typeset -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon context vcs dir newline prompt_char)

再看看,是不是舒服多了。

不要直接修改.p10k.zsh,因为每次执行p10k configure都会重新生成该文件。

进阶

其实powerlevel10k提供更高级的定制方法,搜索.p10k.zsh,查看prompt_example相关内容,发现可以自定义提示符元素的方法。

假如我们想在git信息前面增加仓库名称,只需要定义一个函数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function prompt_reporoot() {
    local d="$PWD"
    while [ ! -e "$d/.git" ] && [ "$d" != '/' ]; do d=$(dirname $d); done

    if [ "$d" != '/' ]; then
        typeset -g REPOROOT="$d"
        p10k segment -f "$POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR" -t "$(basename $REPOROOT)"
    elif [ ! -z "$REPOROOT" ]; then
        unset REPOROOT 
    fi
}

然后修改POWERLEVEL9K_LEFT_PROMPT_ELEMENTS为:

1
typeset -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon context reporoot vcs_joined dir newline prompt_char)

现在提示符看起来就是这样子了:

这里就抛砖引玉的简单介绍一下,更多功能大家自己探索吧。下面是我个人定制的效果,是不是很帅?

瞬态提示符 (Transient prompt)

这个应该是powerlevel10k的特色功能了,先让我们看个动图:

transient-prompt

有了这个瞬态提示符,我们就不再受满屏提示符的影响了。是不是很绚?

不过嘛,这个对终端和zsh的要求比较高,要求界面绘图性能要足够快。先来测一测:

1
2
3
4
git clone --depth=1 https://github.com/romkatv/zsh-prompt-benchmark.git
cd zsh-prompt-benchmark
source zsh-prompt-benchmark.plugin.zsh
zsh-prompt-benchmark 1 10

测试完会看到Time per prompt,如下图所示:

如果你能达到 10-15 ms 左右的性能,那可以试试了,否则的话提示符总是闪烁,得不偿失。

开启这个功能只需要在引导配置界面选择即可,这里就不多说了。

结束语

虽然,这只是zsh的一个小主题,对提升生产力并没什么帮助。但powerlevel10k这种类似零配置的做法在开源软件中的确是很难得的(上期我们说《好物推荐 - scrutiny》时就提过这个问题),从这就看得出来,现在开源界对用户体验的态度。这也是我为什么要写上一篇文章的原因。如果所有开发者都能够像powerlevel10k一样注重用户体验,Linux 等开源软件的发展也许会更好一些。


最后更新于 2024-02-03
小酌怡情
Built with Hugo
主题 StackJimmy 设计
访问量 -    访客数 - 人次