zsh-notes
文章目录
【注意】最后更新于 November 25, 2019,文中内容可能已过时,请谨慎使用。
从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
- 如果
raw.githubusercontent.com可以访问,则直接使用官方推荐方式:
|
|
- 如果上述链接访问缓慢,可以使用
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速度提升明显。
|
|
其中 $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 。
|
|
启用:
|
|
zsh-syntax-highlighting
功能:以不同的颜色标记命令的不同部分,比如,错误命令显示红色,正确命令显示绿色。 地址:https://github.com/zsh-users/zsh-syntax-highlighting 。
|
|
启用同上。
zsh-history-substring-search
功能:输入部分字符,按上下键在历史记录中匹配包含的命令,这个比 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 查看.命令的作用。可以看这个问题了解两者的区别。