配置一个舒适的 zsh 环境
侧边栏壁纸
  • 累计撰写 13 篇文章
  • 累计收到 2 条评论

配置一个舒适的 zsh 环境

moxne
2023-05-13 / 0 评论 / 34 阅读 / 正在检测是否收录...

作为 *nix(指 macOS)重度用户,也作为 VPS 玩家,每天接触最多的就是终端。一个高效、美观的终端可以显著提升日常作业的效率和幸福感。

安装使用 zsh
一般的 Linux 发行版,默认 Shell 大多是 bash,可能需要自己安装 zsh。macOS 的默认 Shell 就是 zsh。
通过 echo $SHELL 可以查看当前使用的 Shell。
通过 cat /etc/shells 可以查看系统安装的所有 Shell。

安装后,在终端输入 zsh 就可以进入 zsh。

运行 chsh -s /bin/zsh 可以将默认 Shell 换成 zsh,这样打开终端或者用 SSH 登录,默认就会使用 zsh。

如果没有进行配置,刚打开 zsh,可能感觉和 bash 的区别并不大。事实上,zsh 最强大之处就在于其可拓展性以及插件生态。配置下面这些主题 / 插件,使用体验就可以吊打 bash 了!

(我并不喜欢 oh-my-zsh,原因之一是启动有点慢。这里我还是用原生 zsh 配置了)

Powerlevel10k
Powerlevel10k 是一套 zsh 主题,强调速度、灵活性以及开箱即用的体验。
Github 项目地址

这个主题非常强大,第一次使用就惊艳到了我。

Powerlevel10k 初始配置

首先第一次使用就有一个非常友好的 configuration wizard 引导你进行「傻瓜式」的配置。这个主题也提供了相当多的样式,可以根据偏好自己选择。不管是简洁还是炫酷的风格都有……

而且它还支持集成 git。当进入一个 git 仓库,当前输入行前就会显示对应的信息,包括有多少更改未提交、分支名等等。

Powerlevel10k 会显示 git 仓库的信息

p10k 本身提供了丰富的插件(这好像是插件的插件)。一切都是可以自定义的。如果不满足于引导式配置程序简单的配置,也可以自己修改相应的配置文件(如图中右边显示的 127.0.0.1:10800 就是我配置了终端显示当前代理)。支持在终端显示时间、网络甚至内存等等各种信息。

这个主题的安装也非常方便(其实本质上是 zsh 插件),先 clone 这个 git 仓库(我自己一般都 clone 到 ~/.zsh 目录下),然后在 .zshrc 中引入即可:

source ~/.zsh/powerlevel10k/powerlevel10k.zsh-theme
重启终端,应该就能看到 configuration wizard。

建议配套使用它提供的字体:MesloLGS。这是一个特制的等宽字体,内置了各种小图标,可以显示在终端里。如果不使用这个字体,许多图标就无法显示,当然 wizard 会询问你图标显示是否正常,若回答不正常,配置后就不会显示图标。

zsh 插件推荐
zsh-autosuggestions
zsh 上像 fish shell(另一种功能丰富的 Shell)一样快速且低调的自动建议插件。
Github 项目地址

这个插件可以根据历史记录等对当前的输入提供建议,建议会以浅灰色的背景显示于当前输入文本「下方」:

zsh-autosuggestions 提供了 echo 的建议

像这张图中一样,只要输入 ec 两个字符,这个插件就会建议 echo $SHELL(由于我刚刚输入过这个命令),并以灰色显示。我可以照着输入,也可以按方向右键直接自动补全。

(是不是有点 Copilot 的感觉 🙃)

安装方法类似,clone 仓库后在 .zshrc 里加入:

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
重启终端即可生效。(官方的安装指南也介绍了用包管理器安装的方法,可以参考)

zsh-autocomplete
zsh-autocomplete 为 zsh 终端添加了实时预输入自动补全功能。
Github 项目地址

这是我最喜欢的一个插件!

之前使用过 Fig 这个软件,这是一个终端的拓展程序,可以在输入的时候实时提供一个小下拉列表,显示自动补全的各个候选项。然而劝退我的是这个软件需要登录才能使用,而且随着商业化也变得愈发臃肿。于是我找到了更优秀、更原生的平替,就是 zsh-autocomplete。

这个插件和 Fig 一样可以在输入的时候实时提供自动补全,而且是在终端内实时更新的。这被称为「实时预输入自动补全」(real-time type-ahead autocompletion)。即每多输入一个字符,补全列表就会发生变化,根据用户的输入实时更新。

更舒服的是它可以实时显示常用命令各种选项的解释文本,有了这个插件基本可以不需要 man 了,也不再需要死记硬背各种 arguments 是什么意思。这个功能大大提高了终端的操作效率。

zsh-autocomplete 可以实时显示各种选项的解释

和其他插件的用法一样,clone 到本地之后只要在 .zshrc 里 source 即可:

source ~/.zsh/zsh-autocomplete/zsh-autocomplete.plugin.zsh
这个插件对实时响应的要求比较高,所以如果是网速很慢的国外 VPS(输入一个字母都要等一下的那种)不建议使用,不然可能会非常卡。

zsh-syntax-highlighting
zsh 上像 fish-shell 一样的语法高亮。
Github 项目地址

安装这个插件后,终端中输入的合法的命令会显示为绿色,不合法的命令会显示为红色,不用回车运行即可检查输入是否正确。并且输入存在的文件地址时,其会自动显示下划线,也可以一目了然地检查文件地址是否输入正确。大大提升了效率。

安装也是 clone 后 source 即可。

source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
Git 同步 zsh 配置
最后介绍一个奇技淫巧,用 Git 同步 $HOME(即 ~ 表示的用户目录)下的配置文件。

由于我有不止一台 VPS,还有 macOS,平时折腾还经常装新的系统,每次都重新按如上配置 zsh 非常麻烦,所以我用一个 git 仓库存储了 $HOME 目录下的配置文件,包括 zsh、vim 等的配置。具体是这些文件:

.vim/
.zsh/
.gitignore
.p10k.zsh
.tmux.conf
.vimrc
.zshrc
直接在 $HOME 目录下 git init 就可以初始化空 git 仓库。

然而 $HOME 文件夹下有太多繁杂的文件,如何实现只跟踪这几个文件呢?秘诀就在于这个 .gitignore 文件:

*
没错,要求忽略所有文件。需要添加某个文件或文件夹的时候,可以使用 --force 强制跟踪。

git add .zshrc --force
这个地方的要求本质上是要用 .gitignore 维护一个白名单(而不是通常的黑名单),我搜集了不少其他解决方案,但是都有不完美之处。忽略全部文件再用 --force 添加,是我认为最简洁优雅的方案了。

现在添加 remote,就可以保持同步啦~

0

评论 (0)

取消