Zsh 技巧和窍门
在 unix/linux 操作系统环境中,我们会经常讨论 shell、终端和命令行接口。Bash 可能是最有名的 shell,但在 Mac 电脑中,Zsh 可能是最为流行的 shell 了。
什么是 Zsh?
Zsh 也被称为 z Shell,它扩展了 Bourne Shell (sh)的功能,提供了更新的特性以及对插件和主题的更多支持。从2019年的 MacOS Catalina 开始,Zsh 成为 Mac 电脑中默认的登录和交互式 shell。
安装 Zsh
安装 Oh My Zsh 前提条件:必须已安装 zsh
Mac
在 Mac 电脑上,你可以使用 Homebrew 来安装 Zsh。brew install zsh
Linux(Ubuntu)
# 1. 安装zsh sudo apt-get install zsh # 2. 确认是否安装成功 zsh --version # 3. 设置zsh为默认shell sudo chsh -s (which zsh) # 4. 注销重新登录
Linux(Centos)
# 1. 安装zsh sudo yum install zsh # 2. 确认是否安装成功 zsh --version # 3. 设置zsh为默认shell sudo chsh -s (which zsh) # 4. 注销重新登录 # 查看系统当前 shell cat /etc/shells
通过yum安装的zsh的版本是5.0.2的,而很多主题都要用到更高版本的zsh,需要高版本可以使用源码安装
首先卸载zsh
yum remove zsh
然后编译吧
sudo yum update -y sudo yum install -y git make ncurses-devel gcc autoconf man git clone -b zsh-5.7.1 https://github.com/zsh-users/zsh.git /tmp/zsh cd /tmp/zsh ./Util/preconfig ./configure sudo make -j 20 install.bin install.modules install.fns
设置成默认shell
command -v zsh | sudo tee -a /etc/shells sudo chsh -s /usr/local/bin/zsh
当安装完 Zsh 后,你也可以安装最流行的 Zsh 插件,oh-my-Zsh
,这个插件有很多内置插件和主题,使用如下安装脚本:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
手动安装
1.1 卸载低版本
# 卸载当前版本 sudo yum remove zsh
1.2 下载源码
# 下载 wget https://sourceforge.net/projects/zsh/files/zsh/5.8/zsh-5.8.tar.xz/download # 解压 tar xvf zsh-5.8.tar.xz
1.3 编译安装
# 安装编译工具 yum install gcc perl-ExtUtils-MakeMaker yum install ncurses-devel # 进入源码目录 cd zsh-5.8 # 执行配置 # 默认安装在:/usr/local/bin/zsh ./configure # 编译和安装 make && make install # 添加信息 vim /etc/shells # 在最后一行加上:/usr/local/bin/zsh
1.4 验证结果
# 切换shell chsh -s /usr/local/bin/zsh # 查看版本信息 zsh --version # zsh 5.8 (x86_64-pc-linux-gnu)
Zsh基本命令
6个鲜为人知的 Zsh 技巧和窍门
take
命令
这个命令是 mkdir 和 cd 两个命令的组合。也可以根据需要生成中间目录。
- 指定命令查看历史
输入指定命令,再按向上箭头,可循环遍历以该命令开头的历史记录
zmv
用 zmv 重命名大量文件。首先,运行
autoload zmv
来安装zmv
。然后执行如下命令:
zmv '(*).(jpg|jpeg)' 'demo-1.2'
zcalc
在命令行中打开计算器,首先,运行
autoload zcalc
来安装zcalc
。然后就可以执行zcalc
命令。
Ctrl-q
当你输入了一条长的命令,发现需要在其之前先执行一条命令时,就可以按
Ctrl-q
暂存当前命令,然后输入另外一条命令,当另外这条命令执行结束后,会自动重新填充好暂存的命令。
ctrl-x-e
当你输入了一条很长的命令,发现命令中间有地方输入错误时,可以按
ctrl-x-e
将该命令拷贝到编辑器中进行编辑,编辑完后,保存退出即可。
好用的插件
要启用zsh的插件, 在~/.zshrc 中设置:
plugins=(git autojump last-working-dir tmux tmuxinator web-search fancy-ctrl-z themes)
- autojump
- last-working-dir
- tmux
- tmuxinator
- web-search
- fancy-ctrl-z
安装oh-my-zsh
- 可以通过 curl 或 wget 两种方式来安装,用一条命令即可安装。
curl 安装
GitHub:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Gitee ( 国内镜像 )
sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
wget 安装
GitHub:
sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
Gitee ( 国内镜像 )
sh -c "$(wget -O- https://gitee.com/pocmon/mirrors/raw/master/tools/install.sh)"
[root@master]/fly/k8s/shell/ohmyzsh# ./install.sh Cloning Oh My Zsh... remote: Enumerating objects: 1280, done. remote: Counting objects: 100% (1280/1280), done. remote: Compressing objects: 100% (1236/1236), done. remote: Total 1280 (delta 24), reused 1230 (delta 24), pack-reused 0 Receiving objects: 100% (1280/1280), 1.06 MiB | 1.23 MiB/s, done. Resolving deltas: 100% (24/24), done. From https://github.com/ohmyzsh/ohmyzsh * [new branch] master -> origin/master Branch master set up to track remote branch master from origin. Already on 'master' /fly/k8s/shell/ohmyzsh Looking for an existing zsh config... Found ~/.zshrc. Backing up to /root/.zshrc.pre-oh-my-zsh Using the Oh My Zsh template file and adding it to ~/.zshrc. __ __ ____ / /_ ____ ___ __ __ ____ _____/ /_ / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ / /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / \____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ /____/ ....is now installed! Before you scream Oh My Zsh! look over the `.zshrc` file to select plugins, themes, and options. • Follow us on Twitter: https://twitter.com/ohmyzsh • Join our Discord community: https://discord.gg/ohmyzsh • Get stickers, t-shirts, coffee mugs and more: https://shop.planetargon.com/collections/oh-my-zsh
升级oh-my-zsh
要升级oh-my-zsh, 终端输入:
获取更新
默认情况下,系统会提示您每 2 周检查一次更新。在 Oh My Zsh 加载之前~/.zshrc
,您可以通过在文件中添加一行来选择其他更新模式:
- 自动更新无确认提示:
zstyle ':omz:update' mode auto
- 如果有可用更新,请每隔几天提供一次提醒:
zstyle ':omz:update' mode reminder
- 要完全禁用自动更新:
zstyle ':omz:update' mode disabled
注意:您可以使用以下设置控制 Oh My Zsh 检查更新的频率:
# This will check for updates every 7 days zstyle ':omz:update' frequency 7 # This will check for updates every time you open the terminal (not recommended) zstyle ':omz:update' frequency 0
手动更新
如果您想随时更新(也许有人刚刚发布了一个新插件而您不想等待一周?)您只需要运行:
omz update
卸载 Oh My Zsh
Oh My Zsh 并不适合所有人。我们会想念你,但我们想让分手变得轻松。
如果要卸载oh-my-zsh
,只需从命令行运行uninstall_oh_my_zsh
。它将自行删除并恢复您以前的bash
或zsh
配置。
使用 Oh My Zsh
插件
Oh My Zsh 附带大量插件供您使用。您可以查看插件目录和/或wiki以查看当前可用的内容。
启用插件
一旦您发现一个(或多个)您想与 Oh My Zsh 一起使用的插件,您需要在.zshrc
文件中启用它们。您将在您的$HOME
目录中找到 zshrc 文件。用你最喜欢的文本编辑器打开它,你会看到一个列出你想要加载的所有插件的地方。
vim ~/.zshrc
例如,这可能开始看起来像这样:
plugins=( git bundler dotenv macos rake rbenv ruby )
请注意,插件由空格分隔(空格、制表符、新行…)。不要在它们之间使用逗号,否则会中断。
# 刷新配置 source ~/.zshrc
使用插件
每个内置插件都包含一个README,用于记录它。此自述文件应显示该特定插件中包含的别名(如果插件添加了任何别名)和额外的好东西。
主题
我们会承认的。在 Oh My Zsh 世界的早期,我们可能有点太高兴了。我们现在捆绑了超过 150 个主题。他们中的大多数人在 wiki 上都有截图(我们正在努力更新这个!)。去看一下!
选择主题
Robby 的主题是默认主题。这不是最花哨的。这不是最简单的。这是正确的(对他来说)。
找到要使用的主题后,您需要编辑该~/.zshrc
文件。您将在其中看到一个环境变量(全部大写),如下所示:
ZSH_THEME="robbyrussell"
要使用不同的主题,只需更改值以匹配所需主题的名称。例如:
ZSH_THEME="agnoster" # (this is one of the fancy ones) # see https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#agnoster
注意:许多主题需要安装电力线字体或书呆子字体才能正确呈现。没有它们,这些主题将呈现奇怪的提示符号
打开一个新的终端窗口,您的提示应如下所示:
如果您没有找到适合您需求的主题,请查看 wiki 了解更多主题。
如果你觉得很烦,你可以让电脑在你每次打开一个新的终端窗口时为你随机选择一个。
ZSH_THEME="random" # (...please let it be pie... please be some pie..)
如果您想从您最喜欢的主题列表中选择随机主题:
ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
如果您只知道不喜欢哪些主题,则可以将它们类似地添加到忽略列表中:
ZSH_THEME_RANDOM_IGNORED=(pygmalion tjkirch_mod)
异常问题
1. 卸载zsh后无法登陆root账户的解决方案
#在终端中输入 sudo vim /etc/passwd #将第一行 root:x:0:0:root:/root:/bin/zsh #改为 root:x:0:0:root:/root:/bin/bash # 将最后一行 username:x:1000:1000:username,,,:/home/username:/username/local/bin/zsh # 改为 username:x:1000:1000:username,,,:/home/username:/username/local/bin/bash # 保存就可以登录root了
参考链接:
t:/root:/bin/zsh
#改为
root❌0:0:root:/root:/bin/bash
将最后一行
username❌1000:1000:username,:/home/username:/username/local/bin/zsh
改为
username❌1000:1000:username,:/home/username:/username/local/bin/bash
保存就可以登录root了
## 参考链接: [zsh](https://www.zsh.org/) [ohmyzsh更新](https://github.com/ohmyzsh/ohmyzsh#getting-updates) [ohmyzsh插件清单](https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins) [ohmyzsh主题](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)