macOS Zsh 使用 oh-my-zsh 打造高效便捷的 shell 环境

Zsh 完全兼容 bash,支持强大的智能命令补全功能,支持大量的界面主题和插件,功能和效率都极大的增强和提高。

Posted by sysin on 2020-09-05
Estimated Reading Time 3 Minutes
Words 919 In Total
Viewed Times

作者:gc(at)sysin.org,主页:www.sysin.org

在 Unix/Linux 的世界里,人机交互的工具就是 shell 了,由于各个发行版的系统默认 shell 都是 bash,所以 bash 的知名度是最高的。其实还有一款效率远超 bash 的 shell,叫做 zsh。zsh 同样历史悠久,发布于 1990 年,只比 bash 晚一年,而且 zsh 相比 bash 有很多功能上、性能上的改进。想要了解两者具体有那些差别,可以查看这篇文章

zsh 虽然很优秀,但在初期配置上太过繁琐,流行率一直不高,直到 github 上 oh-my-zsh 项目的出现,使大家使用 zsh 的便捷性大大提高,从 macOS Catalina 版开始默认使用 zsh,使得 zsh 得到了更加广泛的关注。

很重要的一点,zsh 完全兼容 bash,如果你的 bash 脚本开头是以 !#/bin/bash 的话,在 zsh 下还是完全兼容 bash 的。

Mac 系统内置了几种 shell:

1
2
3
4
5
6
7
8
9
10
11
12
cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

1. 使用 zsh 作为默认 shell

从 macOS Catalina 版开始,您的 Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell。您还可以在较低版本的 macOS 中将 zsh 设置为默认 Shell。

1
chsh -s /bin/zsh

参看:在 Mac 上将 zsh 用作默认 Shell

2. 安装 oh-my-zsh

自动安装

1
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

也可以手动安装:

手动安装

下载 oh-my-zsh

1
git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh

备份原有 ~/.zshrc(如果有)

1
cp ~/.zshrc ~/.zshrc.bak

从模板创建 zsh 配置文件

1
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

3. 更改 zsh 主题

主题样式这里查看。

1
2
3
4
5
vi ~/.zshrc
# 找到
ZSH_THEME="robbyrussell"
# 例如修改为
ZSH_THEME="ys"

注:主题文件在 ~/.oh-my-zsh/themes 目录

4. 命令自动补全

下载一个插件 zsh-autosuggestions,按 tab 键将智能补全命令包括命令选项、参数和目录等。

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

编辑 ~/.zshrc,找到plugins=(git)这一行,修改为:

plugins=(git zsh-autosuggestions)

退出终端重新打开生效。

注:插件在 ~/.oh-my-zsh/plugins 目录,网上有大量有趣的插件,可以自行搜索安装。

  • 自动列出目录

输入 cd 按 tab 键,目录将自动列出,在按 tab 可以切换。

  • 自动目录名简写补全

要访问 /usr/local/bin 这个长路径,只需要 cd /u/l/b 按 tab 键自动补全。

  • 自动大小写更正

要访问 Desktop 文件夹,只需要 cd de 按 tab 键自动补全,或者查看 README.md,只需要 cat rea 自动更正补全。

  • 自动命令补全

输入 kubectl 按 tab 键即可看到可用命令。

  • 自动补全命令参数

输入 kill 按 tab 键会自动显示出进程的 process id。

5. 别名 alias

我们看下 git 的别名:

1
cat ~/.oh-my-zsh/plugins/git/git.plugin.zsh
1
2
3
4
5
6
7
8
9
10
11
12
13
......

alias g='git'

alias ga='git add'
alias gaa='git add --all'
alias gapa='git add --patch'
alias gau='git add --update'
alias gav='git add --verbose'
alias gap='git apply'
alias gapt='git apply --3way'

......

自定义别名,在~/.zshrc中,最下面直接写即可。

1
2
3
4
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
alias ll='ls -lahF --color'
1
echo 'alias ll="ls -lahF"' >> ~/.zshrc

更强大的 alias 命令,比如下面命令,当你在 zsh 环境下输入 hello.py 即可直接用 vim 打开文件编辑,一个 tgz 的文件即可自动解压缩。

1
2
3
alias -s py=vim
alias -s conf=vim
alias -s tgz='tar zxvf'

6. 相关网站




如果文章中使用的内容和图片侵犯了您的版权,请联系作者删除。如果您喜欢这篇文章或者觉得它对您有用,欢迎您发表评论,也欢迎您分享这个网站,或者赞赏一下作者,谢谢!


支付宝打赏 微信打赏

赞赏一下