README
本文介绍了 Zsh
是什么,与传统的bash有什么不同,如何安装并使用,Shell
的概念,以及zsh的配置集oh-my-zsh
的主题与插件的使用。
zsh
是一款 成熟稳定,现代化的 shell,兼容于传统的 bash sh 的同时,比它们拥有更强大的功能。以至于苹果系统已将 zsh 取代 bash 作为系统默认的 shell
了[1].
oh-my-zsh
集成了 zsh 的 配置文件、主题 Themes、插件 Options,使任何人可以轻松的配置出一个 beautiful & friendly 的 zsh,来提高生产效率。包括更智能的色彩高亮,历史目录快速跳转,kill 进程名按 tab 键 自动转 PID 等自动补齐功能。
序言:
广受本视频启蒙,特放此处,可以看作为本文的导览版视频,本文是根据此视频的基础上进行了增强。
感谢up
主优先制作了这期视频。
ZSH 是什么
在这之前,你可能需要明白 shell
的概念
shell
是机器外面套一层命令行的壳,用于人际交互,Linux
下的Bash
和sh
都属于shell
的一种
zsh
也是一种 shell
,兼容于传统的 bash
sh
的同时,还比它们拥有更强大的功能。
以至于苹果系统 macOS Catalina
开始 ,已将 zsh
取代 bash
作为系统默认的 shell
了[1:1],这证明了 zsh
是一款 **成熟稳定,现代化 **的 shell
.
zsh 兼容性:
💌 点击展开查看
兼容原理:
zsh 内建了一个仿真模式 emulation mode ,可以对 bash ksh csh 进行仿真,该模式下可以使用与 Bash 相同的语法和命令集,从而达到几乎完全的兼容 输入
emulate [ bash | csh | ksh ]
进入他们的仿真模式。
兼容性的注意事项:
-
echo 命令
echo
是Bulit-in
内置命令,zsh 下要被转义2
次,内建bulit-in
一次,输出到终端一次,所以要 用-E
显式指明不转义,以减少一次转义。[2]
oh-my-zsh 是什么
博主描述
正如 bash
有 .bashrc
配置文件,zsh
也有他的配置文件 .zshrc
,而 oh-my-zsh
就是由开源社区维护并驱动的一款 zsh
配置文件的框架集。
它集成扩展了广大 zsh
使用者的一些常用 配置文件
主题 Themes
插件 Options
,使任何人可以轻松的配置出一个 beautiful & friendly
的 zsh
,来提高生产效率。
包括更智能的色彩高亮,历史目录快速跳转,kill
进程名 tab键
自动转 PID
,错误命令 lls
修正猜测 ls
,更强大的 tab
自动补齐功能等。
有趣的官方介绍
Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.
Sounds boring. Let’s try again.
Oh My Zsh will not make you a 10x developer…but you may feel like one.
Once installed, your terminal shell will become the talk of the town or your money back! With each keystroke in your command prompt, you’ll take advantage of the hundreds of powerful plugins and beautiful themes. Strangers will come up to you in cafés and ask you, “that is amazing! are you some sort of genius?”
Finally, you’ll begin to get the sort of attention that you have always felt you deserved. …or maybe you’ll use the time that you’re saving to start flossing more often. 😬
安装与使用
zsh安装
版本最好 >5 越新越好
- Debian:
apt-get install zsh fzf && zsh --version && chsh -s $(which zsh)
- Centos:
yum instasll zsh && zsh --version && chsh -s $(which zsh)
oh-my-zsh 安装
curl
和 wget
二选一
- via curl :
1 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" |
- via wget :
1 | sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" |
我翻译和优化的 .zshrc
文件
虽然配置文件架构很简单,但是我还是翻译了配置文件中的常用选项释义,希望能帮助到 英文不好 的你修改出一个适合自己的配置文件。
我的配置文件选用了 bira
主题 ,选用的插件有
1 | git fzf history history-substring-search zsh-interactive-cd vi-mode extract pip docker docker-compose alias-finder |
因为使用了更优秀的 z.lua
路径插件,为避免冲突,所以没有选用 z
插件,有需要的可以自己添加噢。
下载使用我最新的 .zshrc 配置:
1 | cd ~ && curl -LO https://raw.githubusercontent.com/Liaozhebin/files/master/.zshrc && source .zshrc |
使用内置主题
开始全部看了一下,记录了比较美观整洁的有:simple
suvash
wedisagree
ys
robbyrussell
agnoster bira ,其中 robbyrussell
是 oh-my-zsh
的默认主题,最后选定了以下 2
款使用
其中也可以 更改主题名为 random
,这样每次使用 zsh 终端会随机应用一个内置主题,这样可以很方便的体验每一个主题的,并对喜爱的进行收藏。
使用外置主题不能使用
random
随机参数,此参数只针对内置主题进行随机应用摘自官方wiki:Note: Using a random theme with
$ZSH_THEME="random"
will not look into your custom themes directory. Only built-in themes will be used. (Until PR #3743 is merged, which makesrandom
include custom themes.)
安装外部主题
首先解决依赖
-
保证版本号 zsh >5 ,同时部分主题插件有详细的要求,比如版本 >5.3,详情见其 Documents
-
非必须 想要顺利安装使用外部主题,还需要安装字体依赖包 Powerline fonts
因博主安装字体后不知如何应用字体,所以折叠安装过程
-
debian、ubuntu:
apt-get install fonts-powerline
-
fedora:
dnf install powerline-fonts
-
other systems:
1
2
3git clone https://github.com/powerline/fonts.git --depth=1
cd fonts && ./install.sh
cd .. && rm -rf fonts
选用外部主题
外部主题太多了,浏览了前 40%+ 的主题预览图,筛选了以下这些比较讨眼缘的主题:
-
zsh2000 [类agnoster]
-
Bullet train[2.4k]
-
powerlevel10k[5K]
-
Spaceship ZSH[11k]
最后经过粗略的二次对比,最后选择了 powerlevel10k 这款拥有 5K+ 收藏量的主题,其实这款主题还有同门一个大兄弟 powerlevel9k,拥有 12.6K+ Star,因为种种原因[3]而剥离出了 powerlevel10k 这个分支项目,同时兼容于 powerlevel9k 的配置。
使用 powerlevel10k 外部主题:
环境要求:
-
要求
zsh
版本 >5.1
-
推荐安装 Powerline fonts 字体
使用感受:
能显示命令执行花费时间,这点很棒。但是需要完成 下图的初始化向导 才能体现出这个主题的优势,所以个人觉得只适合在长期使用的主机上使用,不适合在短期使用的云服务器上。
想在短期的服务器上使用,只需上传主题配置文件
.p10k.zsh
到~
根目录即可。或者查看我的另一篇文章 antigen,zsh的包管理器。
安装过程:
- 安装:
1 | git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k` |
- vim修改
.zshrc
的主题参数为powerlevel10k/powerlevel10k
1 | vim ~/.zshrc |
-
输入
p10k configure
进入主题配置向导,配置好后的配置文件保存在~/.p10k.zsh
中,如果这个文件不存在,正常情况下会启用初始化配置向导。(如下图) -
enjoy it to the max
使用插件
内置插件
自己选用的插件如下
git fzf history-substring-search zsh-interactive-cd vi-mode extract pip docker docker-compose alias-finder
-
history
别名插件 ReadmeAlias Command h
history
hs
history | grep
hsi
history | grep -i
-
zsh-history-substring-search
输入历史记录命令中的任何部分,然后按选定的键(
UP
和DOWN
箭头)来循环进行匹配。Readme -
extract
Readme插件定义了一个名为的
extract
的函数,可以使用统一的extract
命令解压多种类型的压缩文件,这样,您就不必知道要使用哪个特定命令来提取压缩文件。 -
git
别名插件 Readme -
zsh-interactive-cd
Readme此插件是
fzf
与cd
结合的交互式路径模糊过滤插件,类似于z -I .
的效果 >
使用 : 输入cd
后按control + o
激活 -
pm
[Readme](https://github.com/Angelmmiguel/pm一个类似于收藏夹的项目路径快速切换 Usage
其他值得一试的内置插件
-
z
是路径快速跳转插件,类似于 z.lua z.sh autojump -
timer
是显示命令执行时间的插件。 -
adb
是 adb 的命令补全插件。 -
cp
是rsync的简化插件。 -
tmux
是 tmux 的 alias 别名插件。 -
web-search plugin
:适合桌面用户,方便的打开输入关键词打开对应搜索引擎,类似于 Listary 的网页搜索。 -
command-not-found
Readme这是一个当你运行
一个未知 or 错误命令
时,插件会自动提示你可能需要安装相关名字的软件包
外部扩展插件
外部插件可能需要 手动下载安装(而非主题直接下载到目录的方式),如 z.lua
zsh-autosuggestion
似乎不错的外置插件:
mysql-colorize
mysql 命令着色插件似乎不错。
安装 zsh-autosuggestion
插件
这是一个类似 fish
命令提示的外置插件,它会根据您的历史命令记录建议您键入的命令。
安装步骤
-
Clone this repository into
$ZSH_CUSTOM/plugins
(by default~/.oh-my-zsh/custom/plugins
)1
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
-
Add the plugin to the list of plugins for Oh My Zsh to load (inside
~/.zshrc
):1
plugins=(zsh-autosuggestions)
-
Start a new terminal session.
总结:
外部主题或者插件文件添加到 ./oh-my-zsh
下的 plugins
或 themes
文件夹中,回到 ~/.zshrc
修改对应的主题插件名字后, source
引用即可(插件一般需要新建对应插件名的目录后放置文件)
z.lua 的安装
z.lua 介绍
z.lua
是一个快速路径切换工具(类似 z.sh / autojump / fasd),兼容 Windows 和所有 Posix Shell 以及 Fish Shell 的同时包含了众多改进,它会跟踪你在 shell
下访问过的路径,经过一段简短的学习之后,z.lua
会帮你跳转到所有匹配正则关键字的路径里 Frecent
值最高的那条路径去,比如:z foo bar
可以匹配到 /foo/bar
正式安装
- 安装 lua :
1
apt install -y fzf lua5.3 && mv /usr/bin/lua5.3 /usr/bin/lua
- 同步我最新的 .zshrc 配置:
1
cd ~ && curl -LO https://raw.githubusercontent.com/Liaozhebin/files/master/.zshrc && source .zshrc
- 下载 z.lua:
1
cd ~ && curl -LO https://raw.githubusercontent.com/skywind3000/z.lua/master/z.lua && chmod 777 ./z.lua && mv ./z.lua $ZSH_CUSTOM/ && echo 'eval "$(lua $ZSH_CUSTOM/z.lua --init zsh once enhanced)"' >> ~/.zshrc && echo source ~/.zshrc
- 添加 z.lua 的 alias
1
echo ' alias zz="z -i" # 使用交互式选择模式 \n alias zf="z -I" # 使用 fzf 对多个结果进行选择 \n alias zft="z -I -t" # 按时间权重排序 \n alias zb="z -b -i" # 快速回到父目录 \n alias zbf="z -b -f" # 使用 fzf 进行父目录筛选 \n ' >> ~/.zshrc && echo source ~/.zshrc
lua
not found error:
if notice lua not found ,please install lua & add alias to .zshrc or rename lua bin file,such as :
如果提示找不到 lua 安装后添加对应版本 alias 或 重命名 lua,例如:
alias lua='lua5.3'
ormv /usr/bin/lua5.3 /usr/bin/lua
注解与参考
参考
前人栽树后人乘凉…
知乎专栏:你明白 shell、bash 和 zsh 等词的真正含义吗?
Oh My ZSH!还在被命令行折腾的死去火来吗?这款软件用过的都说好!