从bash切换到zsh,记录一些注意点与心得。

why?

很早就听说 zsh 的强大,期间也尝试过使用 fish,相比 bash,两者确实有太多的优势。在使用bash两年后,对其有了较为深刻的理解后,我决定使用 zsh 来提升日常工作效率。

安装

manjaro 默认已经(也可能是我很久前自己)安装了zsh,直在bash中接敲 zsh,就能切换过去,由于HOME目录没有.zshrc,zsh会先提示你配置,当然也可以按提示跳过配置。没有经过配置的 zsh 是真的不好用,一些常用的alias一个都没有,而且那个prompt对于习惯了 bash + powerline 来说是真的有点失望。手动配置zsh对于只会 bash 语法嗲我来说是有些困难的,于是找到了简化其配置的 oh-my-zsh

ohmyzsh

  1. 如果 raw.githubusercontent.com 可以访问,则直接使用官方推荐方式:
1
2
3
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 或则
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  1. 如果上述链接访问缓慢,可以使用 git clone 或者下载 zip 至 ~/.oh-my-zsh,然后 复制其中的 templates/zshrc.zsh-template~/.zshrc 即可手动安装。 打开 zshrc.zsh-template 可以看到 export ZSH=$HOME/.oh-my-zsh 这行,这就是为什么设置目录为 ~/.oh-my-zsh 的原因,当然可以改成其他路径,如果需要。

其他插件

ohmyzsh 只是一个方便管理 zsh 各种插件主题的工具,就好比 vim 的插件管理扩展 Plug,它内置了一些主题和扩展,同时我们也可以安装(复制文件到指定文件夹)其他主题、扩展。

powerlevel10k 主题

这是一个速度很快的样式很漂亮的主题,相比它的上一代powerlevel9k速度提升明显。

1
2
# 安装
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k

其中 $ZSH_CUSTOM 值应该是~/.oh-my-zsh/custom--depth=1 表示只 克隆最近一次commit后的全部代码,而不会下载以前的旧代码,理论上只比下载 zip 大一丢丢,以后还可以 pull 最新的代码升级。 下载完成后,在zshrc 中修改 ZSH_THEME="robbyrussell"ZSH_THEME="powerlevel10k/powerlevel10k"即可。新开一个 zsh,会自动执行 p10k configure 配置生成 该主题的配置文件 ~/.p10k.zsh,不过在这之前需要先下载推荐的字体,并使用这些字体,才能顺利显示各种有意思的符号(和powerline道理一样)。就是用官方推荐的Meslo Nerd Font字体即可。字体下载:

如果对配置不满意可以使用p10k configure重新配置,后面覆盖即可。

zsh-autosuggestions

功能:和tab不全不同,这个插件可以以灰色字体猜你命令的后面部分。 地址:https://github.com/zsh-users/zsh-autosuggestions 。

1
git clone --depth 1 https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM}/plugins/zsh-autosuggestions

启用:

1
2
3
4
5
6
7
plugins=(
    git
    zsh-autosuggestions
    zsh-syntax-highlighting  # 这是后面要提的重插件
    history-substring-search  # 这是后面要提的重插件
    zsh-completions  # 这是后面要提的重插件
)

zsh-syntax-highlighting

功能:以不同的颜色标记命令的不同部分,比如,错误命令显示红色,正确命令显示绿色。 地址:https://github.com/zsh-users/zsh-syntax-highlighting 。

1
git clone --depth 1 https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM}/plugins/zsh-syntax-highlighting

启用同上。

功能:输入部分字符,按上下键在历史记录中匹配包含的命令,这个比 Ctrl+r 好用,类似的 bash 有 mcfly 工具,个人觉得这个插件更符合习惯。 地址:https://github.com/zsh-users/zsh-history-substring-search 。 和上面两个插件步骤一致。

zsh-completions

功能:扩展zsh的自动补全覆盖范围。 地址:https://github.com/zsh-users/zsh-completions 。

一些兼容设置

一些 bash 下有用的 alias 可以单独写入到一个文件,比如.alias,然后在.bashrc.zshrc 里面都 source 包含一下该文件,对于一些 PATH 设置,比如 Go、Java的配置,可以考虑写入系统配置文件/etc/profile里面,同时该文件一般也会包含所有 /etc/profile.d 文件夹下的所有其他PATH设置。zsh默认是不会source /etc/profile的,需要在 /etc/zsh/zprofile 中写入 emulate sh -c 'source /etc/profile'

另外一点,source. (dot) 两者在 bash 与zsh 中有一点区别。bash 中两者等价,zsh 中,. 不再是 source 的别名,所以 直接 . .zshrc 会报错。具体可以 man dot 查看.命令的作用。可以看这个问题了解两者的区别。