使用 zimfw 作为 zsh 配置框架
Published: 2020-11-16 04:58:00

---
title: 使用 zimfw 作为 zsh 配置框架
published: true
date: 2020-10-14 00:00:00 UTC
tags: 
canonical_url: https://www.hikerpig.cn/2020-10-14-zsh-zimfw-setup/
---

之前使用 oh-my-zsh 的自带 git/nvm 等插件有时候有性能问题，同时据说其框架本身相比其他一些主打速度的配置框架(prezto/zimfw 等)也会慢一点。

稍微折腾了一下，使用 [zimfw](https://github.com/zimfw/zimfw) 作为 zsh 配置框架，它在[速度](https://github.com/zimfw/zimfw/wiki/Speed)和可配置性间达到了很好的平衡。

个人切换后，试了下跑 zprof，启动时间只有原先的一半，度量方式参考 [Profiling zsh startup time](https://stevenvanbael.com/profiling-zsh-startup)。

## [<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#%E6%8F%92%E4%BB%B6%E5%8A%A0%E8%BD%BD)插件加载

用上[自带的模块](https://github.com/zimfw/zimfw/wiki/Modules)和[zsh-users](https://github.com/zsh-users/)里一些优秀的插件，就已经有很好的表现，其中 zsh-users/zsh-autosuggestions 和 zsh-users/zsh-syntax-highlighting 能让 zsh 也有类似于 fish 一样友好的代码高亮反馈和输入自动补全功能。zimfw 比较友好的一点就在于默认配置（使用其提供的安装脚本）里给出的组合就已经很棒了。

添加插件的方式与 oh-my-zsh 不太一样，后者需要把插件添加到指定的 plugins 目录（一般为 clone repo 或者拷贝文件），然后在 `.zshrc` 文件里 `plugins=()` 数组里添加插件名。

而 zimfw 的方式则稍微方便一点，除了类似后者的方式外，还可以不用手动操作目录而是在 `.zimrc` 文件中添加模块名（一般为 github 上的 user/repo 名），可在 [awesome-zsh-plugins](https://github.com/unixorn/awesome-zsh-plugins) 里寻找合适插件，多数与配置框架无关(可以不局限在 oh-my-zsh 提供的插件目录里)。

修改配置文件后，使用命令 `zimfw install` 下载并编译插件(会使用 zsh builtin 的 `zcompile` 将 `.zsh` 文件编译为 `.zwc` 字节码，提高下次加载的速度)，打开新 shell 时新插件生效。

## [<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#%E5%A4%96%E8%A7%82%E5%92%8C%E4%B8%BB%E9%A2%98)外观和主题

zimfw 的主题远不如 oh-my-zsh 丰富，自己的 gallery 里都是偏向极简的风格，不过我们可以自己找一些成熟的主题 [powerlevel10k](https://github.com/romkatv/powerlevel10k) 使用，带有问答式的新手配置指导，功能丰富，推荐使用。

## [<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#%E4%B8%80%E4%BA%9B%E9%85%8D%E7%BD%AE)一些配置

`~/.zimrc`

```
# Start configuration added by Zim install {{{
# -------
# Modules
# -------
# Sets sane Zsh built-in environment options.
zmodule environment
# Applies correct bindkeys for input events.
zmodule input
# Sets a custom terminal title.
zmodule termtitle
# Utility aliases and functions. Adds colour to ls, grep and less.
zmodule utility
zmodule directory

#
# Prompt
#
# Exposes git repository status information to prompts.
zmodule git-info

# Theme
zmodule romkatv/powerlevel10k

# Additional completion definitions for Zsh.
zmodule zsh-users/zsh-completions
# Enables and configures smart and extensive tab completion.
# completion must be sourced after zsh-users/zsh-completions
zmodule completion
# Fish-like autosuggestions for Zsh.
zmodule zsh-users/zsh-autosuggestions
# Fish-like syntax highlighting for Zsh.
# zsh-users/zsh-syntax-highlighting must be sourced after completion
zmodule zsh-users/zsh-syntax-highlighting
# Fish-like history search (up arrow) for Zsh.
# zsh-users/zsh-history-substring-search must be sourced after zsh-users/zsh-syntax-highlighting
zmodule zsh-users/zsh-history-substring-search
# }}} End configuration added by Zim install

# Custom 个人推荐的插件
zmodule DarrinTisdale/zsh-aliases-exa
zmodule zsh-users/zaw
zmodule wookayin/fzf-fasd
```

介绍一些程序和插件:

- [快速跳转工具--FASD 简单介绍](https://segmentfault.com/a/1190000011327993)

## [<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#%E5%8F%82%E8%80%83%E6%96%87%E7%AB%A0)参考文章

- [打造屬於你自己的極速 Shell「iTerm + zsh + zim + powerlevel10k」](https://www.jkg.tw/p2876/)
- [打造 10X Engineer Shell 工作環境. SRE 討生活篇 | by smalltown | Starbugs Weekly 星巴哥技術專欄 | Medium](https://medium.com/starbugs/%E6%89%93%E9%80%A0-10x-engineer-zsh-shell-97e40db76391)
- [Faster and enjoyable ZSH](https://htr3n.github.io/2018/07/faster-zsh)
- [Quit using nvm：快删掉这个占据 Zsh 启动时间一半的怪物！ - Spencer's Blog](https://blog.spencerwoo.com/2020/07/remove-nvm-to-speed-up-zsh/)