zsh+ohmyzsh 终端美化(2024/07/26)

终端作为每天都要使用的工具,一个趁手的终端能够在一定程度上提高效率,下面以zshohmyzsh来记录笔者终端美化的过程。

效果图:

image-20210329085402028

1. zsh安装

  • Debian Linux

    # 更新索引
    $ apt update
    
    # 安装zsh
    $ apt install zsh
    
  • Redhat Linux

    $ yum install zsh
    

    注:通过yum安装的zsh版本可能较低,后续很多插件都需要高版本的zsh才能支持,如果想安装最新版zsh,可以通过下载源码编译安装,具体可参考zsh源码编译安装

2. ohmyzsh安装

通过其官网介绍的安装方式安装会遇到网络的问题,因此除官网介绍的安装方法外此处介绍一种手动快速安装的方法,如果您能科学上网,那么可以直接采用官网的命令来进行安装。

  1. 官方命令

    # 通过curl来安装
    $ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    
    # 通过wget来安装
    $ sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
    
  2. 手动安装

    • Github找到ohmyzsh仓库,下载或拷贝其安装脚本

      复制安装脚本的内容,将其保存到install.sh脚本中:

      image-20210328222132658

    • 执行安装脚本;

      此处通过sh install.sh命令便可以直接安装ohmyzsh,但脚本内还是从Github拉取的仓库,可能会遇到网络比较慢的情况,因此我们通过修改安装脚本中仓库的地址来达到的加速的目的;

      Github加速的方法:

      1. Github仓库同步到Gitee以实现加速的目的;
      2. 通过一些镜像网站来实现加速的目的,笔者比较常用的镜像网站是https://hub.fastgit.org;

      通过熟悉的编辑器编辑install.sh脚本,找到REMOTE仓库地址,将其替换为加速地址,此处笔者提供两个,分别对应上面提到的两种加速方法:

      • https://gitee.com/xiaoqqya/ohmyzsh.git;
      • https://hub.fastgit.org/ohmyzsh/ohmyzsh.git;

      修改前:

      image-20210328222222552

      修改后:

      image-20210328222304032

      通过sh install.sh命令执行安装脚本,安装过程中会询问是否将zsh设置为当前用户的默认shell,确认输入当前用户密码即可,至此安装完成:

      image-20210328222627992

3. 更改主题

zsh的配置文件在用户目录下的.zhsrc文件,更改主题以及接下来的添加插件都是在该文件中进行配置。

  • 查看可用主题

    ohmyzsh的主题放置在用户目录下的.oh-my-zsh/themes文件夹下,我们可以通过查看文件夹下的文件来查看有哪些可用主题:

    $ ls ~/.oh-my-zsh/themes/
    
  • 更改主题

    打开~/.zshrc配置文件,找到ZSH_THEME变量,将其修改为想要修改的主题名称,此处以ys主题为例:

    image-20210328223429375

    保存后重开终端或者执行exec $SHELL命令即可生效。

ohmyzsh自带的主题笔者都不是很喜欢,在其仓库wiki中有一些额外的主题可供选择,如果有你喜欢的,可以按照对应主题提供的安装方法进行安装,然后在.zshrc中修改ZSH_THEME变量为你想用的主题名称即可。

此处推荐笔者常用的spaceship主题,安装方法如下:

# 拉取项目仓库,可以通过上面提到的方法进行加速,此处直接放镜像地址,如果因为时间问题镜像失效,请使用其github官方地址
$ git clone https://gitee.com/xiaoqqya/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt" --depth=1

# 添加软链接
$ ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme" 

# 更改主题,按照上面提到的方法在.zshrc配置中修改ZSH_THEME变量为spaceship,然后重启终端生效

4. 安装插件

插件与主题一样,同样是在.zshrc文件中进行配置。

  • 查看可用插件

    ohmyzsh默认自带了很多插件放置在~/.oh-my-zsh/plugins目录下面,具体每个插件的作用可以参考其仓库wiki:

    $ ls ~/.oh-my-zsh/plugins/
    
  • 启用插件

    ohmyzsh默认只启用了git插件,下面以笔者常用的sudo插件来演示如何启用自带插件,打开~/.zshrc配置文件,找到plugins变量,将您想启用的插件加入进入即可,不通插件名称之间以空格隔开:

    image-20210328224523342

    保存后重开终端或者执行exec $SHELL命令即可生效。

ohmyzsh自带的插件外,您还可以安装一些额外的插件,在其仓库wiki中介绍了一些,可以自行去查看,此处推荐笔者经常使用的插件:

  1. zsh-autosuggestions

    能在输入命令时根据历史记录提供自动建议的插件,效果如下:

    image-20210328225208064

    安装方法:

    # 拉取项目仓库,可以通过上面提到的方法进行加速,此处直接放镜像地址,如果因为时间问题镜像失效,请使用其github官方地址
    $ git clone https://gitee.com/xiaoqqya/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
    
    # 启用插件,按照上面提到的方法在.zshrc配置的plugins中加入zsh-autosuggestions,然后重启终端生效
    
  2. zsh-syntax-highlighting

    当你输入命令的时候,提供语法高亮的插件,效果如下:

    image-20210328225439067

    安装方法:

    # 拉取项目仓库,可以通过上面提到的方法进行加速,此处直接放镜像地址,如果因为时间问题镜像失效,请使用其github官方地址
    $ git clone https://gitee.com/xiaoqqya/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
    
    # 启用插件,按照上面提到的方法在.zshrc配置的plugins中加入zsh-syntax-highlighting,然后重启终端生效
    
  3. conda-zsh-completion

    提供conda虚拟环境名称补全的插件,效果如下:

    img

    安装方法:

    # 拉取项目仓库,可以通过上面提到的方法进行加速,此处直接放镜像地址,如果因为时间问题镜像失效,请使用其github官方地址
    $ git clone https://gitee.com/xiaoqqya/conda-zsh-completion.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/conda-zsh-completion
    
    # 启用插件,按照上面提到的方法在.zshrc配置的plugins中加入conda-zsh-completion,然后重启终端生效
    
  4. pip

    python包管理器pip提供补全,效果如下:

    img

    安装方法:

    # pip 为 ohmyzsh 自带插件,直接按照上面提到的方法在 .zshrc 配置的 plugins 中加入 pip 即可,然后重启终端生效
    
  5. ufw

    为防火墙管理工具ufw命令提供补全,效果如下:

    image-20220102162559844

    安装方法:

    # ufw 为 ohmyzsh 自带插件,直接按照上面提到的方法在 .zshrc 配置的 plugins 中加入 ufw 即可,然后重启终端生效
    
  6. sudo

    通过双击Esc键快速为当前命令添加sudo前缀,安装方法如下:

    # sudo 为 ohmyzsh 自带插件,直接按照上面提到的方法在 .zshrc 配置的 plugins 中加入 sudo 即可,然后重启终端生效
    
  7. docker

    docker命令添加自动补全支持,效果如下:

    img

    安装方法:

    # docker 为 ohmyzsh 自带插件,直接按照上面提到的方法在 .zshrc 配置的 plugins 中加入 docker 即可,然后重启终端生效
    

    配置:

    zstyle ':completion:*:*:docker:*' option-stacking yes
    zstyle ':completion:*:*:docker-*:*' option-stacking yes
    
  8. docker-compose

    docker-compose命令添加自动补全支持,效果如下:

    img

    安装方法:

    # docker-compose 为 ohmyzsh 自带插件,直接按照上面提到的方法在 .zshrc 配置的 plugins 中加入 docker-compose 即可,然后重启终端生效
    
  9. extract

    一条extract命令解压多种压缩包格式,使用方法如下:

    $ extract <filename>
    

    安装方法:

    # extract 为 ohmyzsh 自带插件,直接按照上面提到的方法在 .zshrc 配置的 plugins 中加入 extract 即可,然后重启终端生效
    
  10. command-not-found

    此插件在zsh找不到命令时提供建议的安装包,效果如下:

    img

    安装方法:

    # command-not-found 为 ohmyzsh 自带插件,直接按照上面提到的方法在 .zshrc 配置的 plugins 中加入 command-not-found 即可,然后重启终端生效
    

之后遇到好用的插件再来补充!

5. 自动安装脚本

为了便于安装,笔者将安装 oh-my-zsh 以及常用主题和插件的过程写成了脚本,内容如下:

#!/usr/bin/env sh

if ! which git > /dev/null 2>&1; then
    echo -e "\ngit is not found.\nexit with code 1.\n"
    exit 1
elif ! which curl > /dev/null 2>&1; then
    echo -e "\ncurl is not found.\nexit with code 1.\n"
    exit 1
elif ! which zsh > /dev/null 2>&1; then
    echo -e "\nzsh is not found.\nexit with code 1.\n"
    exit 1
fi

curl -k -sSL https://mirror.ghproxy.com/https://github.com/ohmyzsh/ohmyzsh/blob/master/tools/install.sh | REMOTE="https://mirror.ghproxy.com/https://github.com/ohmyzsh/ohmyzsh.git" RUNZSH="no" sh -s

STARSHIP_PATH="$HOME/.local/bin"
mkdir -p $STARSHIP_PATH
curl -sSL https://mirror.ghproxy.com/https://github.com/starship/starship/blob/master/install/install.sh | sh -s -- -y -b $STARSHIP_PATH -B https://mirror.ghproxy.com/https://github.com/starship/starship/releases
$STARSHIP_PATH/starship preset plain-text-symbols -o $HOME/.config/starship.toml

git clone https://mirror.ghproxy.com/https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
echo -e "\n"

git clone https://mirror.ghproxy.com/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
echo -e "\n"

git clone https://mirror.ghproxy.com/https://github.com/zimfw/environment.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/environment
mv ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/environment/init.zsh ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/environment/environment.plugin.zsh
echo -e "\n"

git clone https://mirror.ghproxy.com/https://github.com/conda-incubator/conda-zsh-completion.git ${ZSH:-~/.oh-my-zsh}/custom/plugins/conda-zsh-completion

sed -i "s/ZSH_THEME=\".*/ZSH_THEME=\"\"/g" $HOME/.zshrc
sed -i "s/plugins=(git)/plugins=(git sudo zsh-autosuggestions zsh-syntax-highlighting environment conda-zsh-completion pip ufw docker docker-compose extract command-not-found copypath copyfile)/g" $HOME/.zshrc

cat <<"EOF" >> $HOME/.zshrc

if [[ "$TERM" == "xterm" ]]; then
  export TERM="xterm-256color"
fi

zstyle ':omz:update' mode disabled
zstyle ':completion:*:*:docker:*' option-stacking yes
zstyle ':completion:*:*:docker-*:*' option-stacking yes

setopt HIST_IGNORE_ALL_DUPS

PATH="$HOME/.local/bin:$PATH"
eval "$(starship init zsh)"
EOF

exec $(which zsh) -l
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐