跳到主要内容

Oh My ZSH

提示

ZSH (Z Shell) 是一种强大的命令行解释器,具有丰富的功能和高度的可定制性。相比于传统的 Bash,ZSH 提供了更强大的自动补全、语法高亮、插件支持等功能,使得命令行操作更加高效和便捷

Oh My Zsh 是基于 zsh 命令行的一个扩展工具集,提供了丰富的扩展功能,它是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式。它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作。给我们一种全新的方式使用命令行

切换使用Zsh

Mac系统默认使用dash作为终端,安装iTerm2后,默认使用zsh作为终端,如果没有,可以通过以下命令切换到zsh

chsh -s /bin/zsh

zsh

可以通过以下命令查看当前使用的shell

echo $SHELL

安装Oh My Zsh

# use curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# or use wget
sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

修改配色(可选)

如果觉得默认的配色不顺眼,可以修改iTerm2的配色,网上有很多现成的配色方案,下载后安装指引导入即可

Oh My Zsh插件

在安装完Oh My Zsh后,会默认安装一些插件

~ ls ${ZSH}/plugins

其中${ZSH}Oh My Zsh的安装目录,默认是~/.oh-my-zsh,除此之外,还有一个变量${ZSH_CUSTOM},表示自定义插件和主题的目录,默认是~/.oh-my-zsh/custom,我们安装的插件一般放在${ZSH_CUSTOM}/plugins目录下(放在默认目录也可以),主题同理

插件配置

~/.zshrc文件中,有一个plugins变量,表示启用的插件列表,默认是

plugins=(git)

有新增插件时,都需要在这里添加插件名称,表示启用这个插件,如果是默认安装的插件也一样需要配置才能启用,例如

plugins=(
git
autojump
zsh-autosuggestions
zsh-syntax-highlighting
...
)

修改完成配置后,需要重新加载配置文件或者新打开一个终端窗口,才能生效

~ source ~/.zshrc

常用插件

语法高亮

在命令行高亮显示语法

~ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git  ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting

命令自动补全

根据历史记录和完成情况给输入的命令提供建议

~ git clone https://github.com/zsh-users/zsh-autosuggestions.git  ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions

autojump

autojump这个插件非常实用,功能是实现目录间快速跳转,想去哪个目录直接 j + 目录名(甚至不用输全),不用在频繁的 cd

安装autojump

brew install autojump

配置autojump,在~/.zshrc文件中添加

plugins=(
...
autojump
)

# set autojump
[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh

重新加载配置文件

~ source ~/.zshrc

插件使用示例,这个插件会根据历史记录来计算各个目录的权重,使用j命令跳转到指定目录

# 例如我们执行过cd /Users/ssgeek/Documents/test,那么下次执行`j test`或者`j te`就可以快速跳转到这个目录
~ cd ~
~ cd /Users/ssgeek/Documents/test
~ cd -
~ j test

Oh My Zsh主题

在安装完Oh My Zsh后,会默认安装一些主题,Oh My Zsh 提供了丰富的主题,也可以在External-themes查看主题的效果(有些主题并没有收录到这个文档中,因此安装Oh My Zsh时也不会自动安装)

可以通过修改~/.zshrc文件中的ZSH_THEME变量来切换主题,默认是robbyrussell

~ ls ${ZSH}/themes
~ cat .zshrc | grep ZSH_THEME
ZSH_THEME="robbyrussell"

主题配置和自定义

主题的安装比较简单,直接将主题文件放到${ZSH_CUSTOM}/themes目录下(放在默认目录也可以),然后修改~/.zshrc文件中的ZSH_THEME变量为主题名称(不需要后缀名)

这里我使用了一个主题ohwonder,这个主题可以

  • 显示命令执行结果,当命令执行成功时显示🤖,执行失败时显示💩
  • 如果在Git仓库中,会显示当前分支和状态,干净时显示😇,有修改时显示😡

我在此基础上进行了一些自定义

默认为

ohwonder.zsh-theme
local ret_status="%(?:%{$fg_bold[green]%}🤖 :%{$fg_bold[red]%}💩 )"
PROMPT='${ret_status} %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}[%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}] %{$fg[yellow]%}😡 "
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}] 😇 "

我修改为

ohwonder.zsh-theme
local ret_status="%(?:%{$fg_bold[green]%}🤖 :%{$fg_bold[red]%}💩 )"
PROMPT='%{$fg_bold[white]%}[$(date +"%Y-%m-%d %H:%M:%S")]%{$reset_color%} ${ret_status} %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'$'\n~ '

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}[%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}] %{$fg[yellow]%}😡 "
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}] 😇 "

主要修改了PROMPT变量,增加了当前时间的显示,并且将命令提示符放到了下一行,在终端前面还增加了一个提示~符号,这样看起来更清晰一些

主题推荐