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 下载源码

  • 源码:https://zsh.sourceforge.io/Arc/source.html
# 下载
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 技巧和窍门

  1. take 命令

    这个命令是 mkdir 和 cd 两个命令的组合。也可以根据需要生成中间目录。

  2. 指定命令查看历史

    输入指定命令,再按向上箭头,可循环遍历以该命令开头的历史记录

  3. zmv

    用 zmv 重命名大量文件。首先,运行 autoload zmv 来安装 zmv。然后执行如下命令:

    zmv '(*).(jpg|jpeg)' 'demo-1.2'
    
  4. zcalc

    在命令行中打开计算器,首先,运行 autoload zcalc 来安装 zcalc 。然后就可以执行 zcalc 命令。

  5. Ctrl-q

    当你输入了一条长的命令,发现需要在其之前先执行一条命令时,就可以按 Ctrl-q 暂存当前命令,然后输入另外一条命令,当另外这条命令执行结束后,会自动重新填充好暂存的命令。

  6. 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,您可以通过在文件中添加一行来选择其他更新模式:

  1. 自动更新无确认提示:

    zstyle ':omz:update' mode auto
    
  2. 如果有可用更新,请每隔几天提供一次提醒:

    zstyle ':omz:update' mode reminder
    
  3. 要完全禁用自动更新:

    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。它将自行删除并恢复您以前的bashzsh配置。

使用 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

注意:许多主题需要安装电力线字体书呆子字体才能正确呈现。没有它们,这些主题将呈现奇怪的提示符号

打开一个新的终端窗口,您的提示应如下所示:

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了

参考链接:

zsh

ohmyzsh更新

ohmyzsh插件清单

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)
Logo

更多推荐