zsh 适合开发的shell环境安装记录和实践

161 阅读2分钟

简介

Zsh(Z Shell)是一款功能强大的开源Unix Shell,基于Bourne Shell开发,兼容Bash语法,但提供了更丰富的交互式体验和高级功能。以下是其核心特点:

  1. 历史与定位
    Zsh由Paul Falstad于1990年创建,现为macOS默认Shell(自Catalina起),并在Linux开发者中广泛流行。它整合了Bash、ksh等Shell的优势,既支持日常交互式操作,又能运行Bash兼容脚本。

  2. 核心优势

    • 智能交互:支持上下文感知的自动补全(如命令、路径、Git分支)、拼写纠错及模糊搜索历史命令。
    • 高度可定制:通过主题(如Powerlevel10k)美化提示符,显示Git状态、环境变量等信息;插件系统(如Oh My Zsh)提供语法高亮、自动建议等扩展功能。
    • 增强功能:递归通配符(/*.txt)、浮点运算、更灵活的数组操作及进程替换等。
  3. 适用场景
    适合开发者、运维人员提升终端效率,尤其推荐给需要个性化界面(如Powerline风格主题)、频繁使用Git/Docker等工具的用户。对于脚本编写,Zsh兼容Bash但建议复杂脚本仍使用Bash以保证兼容性。

  4. 配置简化 通过框架如Oh My Zsh,可快速安装插件和主题,简化配置流程。例如,安装后仅需修改.zshrc文件即可启用插件(如自动补全、语法高亮)。

总结来看,Zsh通过强大的交互功能和可扩展性,成为提升命令行效率的优选工具,尤其适合追求高效与美观的用户。

自己的老文档,分享给掘金的新朋友

安装

apt install zsh -y
chsh -s $(which zsh)

# 使用国内github 镜像
sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"

# 安装插件
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 绕开GFW
git clone https://gitee.com/mirrors/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://gitee.com/mirrors/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

配置 提示

source $ZSH/oh-my-zsh.sh

# 重置提示
PROMPT='%F{cyan}%n@%m%f %F{yellow}%~%f %# '

安装 docker 命令提示

curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker -o ~/.zsh/completions/_docker

编辑 ~/.zshrc

source $ZSH/oh-my-zsh.sh

# 添加补全脚本路径
fpath=(~/.zsh/completion $fpath)
# 启用 Zsh 补全系统
autoload -Uz compinit && compinit -i

使用

要注意 zsh 的配置加载会遵循一定的顺序,登陆 shell 和 非登陆shell 还会有区别

  • 登录 Shell(login shell)
    由系统或终端管理器在用户登录时启动,Shell 程序名前会带 - 前缀(如 -zsh),会依次读取并执行:

    1. /etc/zshenv~/.zshenv
    2. /etc/zprofile~/.zprofile
    3. /etc/zshrc~/.zshrc
    4. /etc/zlogin~/.zlogin
  • 非登录 Shell(non-login shell)
    在已经登录的会话中打开的新终端或脚本执行时启动,不带 - 前缀,仅执行:

    1. /etc/zshenv~/.zshenv
    2. /etc/zshrc~/.zshrc
      不会执行任何 zprofilezlogin 级别的文件

当 vscode 使用 zsh 作为终端shell

vscode 使用的zsh 默认使用的是非登陆shell,所以如果一些系统级别 PATH 最好放到 /etc/zshenv 建议把默认的 /etc/zprofile

if [ -x /usr/libexec/path_helper ]; then
	eval `/usr/libexec/path_helper -s`
fi

迁移到 /etc/zshenv

祝君少踩坑