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
查看.
命令的作用。可以看这个问题了解两者的区别。