| aliases | |||||
|---|---|---|---|---|---|
| tags |
|
||||
| created | 2023-08-18 12:44:52 -0700 | ||||
| modified | 2026-03-05 03:03:28 -0800 |
Zsh 是一个强大的 shell。
所有选项可以查看官方文档:zsh: Options Index。
.zshrc:zsh 配置文件,它是在每次启动 shell 都会运行的文件,属于 zsh 核心配置文件。以后大部分配置都在些文件中进行。.zhistory:zsh 的历史记录文件。.zshenv:用于设置环境变量的配置文件。在这个文件中配置的环境变量,在任何场景下都会被读取。.zlogin:系统启动时会被读取。.zprofile:如果.zlogin存在则不再读取.zprofile;如果.zlogin不存在则查找读取.zprofile。
[!note] 配置文件保存位置
一般来说,上述这些配置文件是有默认存放位置的:
$ZDOTDIR/.zshenv$ZDOTDIR/.zprofile$ZDOTDIR/.zshrc$ZDOTDIR/.zlogin$ZDOTDIR/.zlogout/etc/zshenv/etc/zprofile/etc/zshrc/etc/zlogin/etc/zlogout但若
ZDOTDIR未设定,会使用HOME代替。取决于安装,上述位于/etc的文件也可能在另一目录。
[!info]
.zprofile只在登录时加载一次,所以最好把只加载一次的东西放进里面。
.zshrc为交互式 shell 设置环境, 并且在.zprofile之后加载。
.zshrc将会覆盖在.zprofile中设置的任何东西。
.zshenv最先被读取而且每次都会读取,不管 shell 是登录式, 交互式或者其它任何类型。 推荐在这里设置环境变量。各配置文件加载顺序:
.zshenv→.zprofile→.zshrc→.zlogin→.zlogout
[!note] 相关资料
# 指定历史纪录文件
export HISTFILE=~/.zhistory
# 设置历史纪录的最大值
export HISTSIZE=10000
# 注销后保存的历史纪录量大值
export SAVEHIST=10000
# 附加方式写入历史纪录
setopt INC_APPEND_HISTORY
# 如果连续输入相同命令,历史纪录只保留一个
setopt HIST_IGNORE_DUPS
# 这与上面不同的是,如果新命令与旧命令相同,先删除旧的再加新的
setopt HIST_IGNORE_ALL_DUPS
# 同样也是新旧命令相同只留一个
setopt HIST_SAVE_NO_DUPS
# 相同历史路径只保留一个
# setopt PUSHD_IGNORE_DUPS
# 为历史纪录加时间戳
# 选项INC_APPEND_HISTORY,INC_APPEND_HISTORY_TIME和SHARE_HISTORY中只有一个处于活动状态
# setopt INC_APPEND_HISTORY_TIME因 zsh 版本缘故,可能有些历史纪录的选项是用不了的,具体能用哪个,可以使用 setopt 和 unsetopt 查看。
Note
setopt 和 unsetopt 中的选项写法与 zsh: 16 Options 文档有些出入,比如文档中写的是 PATH_DIRS,但命令查询到的是 pathdirs,而且这两查询命令好像也不完全。就算 unsetopt 查到某选项,也未必真能用。所以还是 source .zshrc 时,看报不报错才能确定哪些选项可用。
[!failure] 报错
command not found: setopt INC_APPEND_HISTORY_TIME,诸如此类,就是选项不存在的表现,即便使用setopt或unsetopt能查到它。
[!info] 相关链接
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'- 从 0 开始:教你如何配置 zsh - 知乎
- (zsh) macOS系统环境变量文件 - 简书
- Site Unreachable
- zshdocs-zh/content/05-files.md· GitHub
oh-my-zsh 是一个强大的 zsh 插件管理器。
oh-my-zsh 因为起步早,所以生态非常完善,缺点就是有点笨重。
oh-my-zsh 的插件非常丰富。
这个插件主要是给 Git_Note 的一些常用命令起了些「别名」(alias)及一些小功能函数。
有可能这些别名会出现冲突。如这插件将 git 命令别名为 g,这就与 GoLang 的一个款多版本管理工具 g 发生冲突。
Tip
解决方法就是,要么不用这个插件,要么就到插件目录中找到相应文件,把那句「别名」代码注释掉就好了。
oh-my-zsh 的 git 插件文件就在:.local/share/zinit/snippets/OMZ::plugins--git/git.plugin.zsh/git.plugin.zsh,把其中 alias g='git' 这行代码注释掉就行了,然后 source .zshrc 重新让 zsh 生效就可以了。
zinit 是一个轻量级的 zsh 插件管理器,速度快。
[!info]
zdharma 的 zinit 原作者删库跑路后,zinit 社区就「分裂」了,出现了两个后继版本:
- zdharma-continuum (
continuum这个名字,应该是continue和community的混合,即表示社区「接棒」 zinit 的更新)- z-shell/zi(
z-shell/zi又有一个 fork 版本:https://github.com/zdharma/zi)。现在使用更多,更活跃的是 zdharma-continuum 这个,建议使用这个版本。
yay -Ss zinit安装完有提示:
============================提示/INFO===============================
Zinit 已安装在 /usr/share/zinit。
现在你可以在你的 zshrc 中用 source /usr/share/zinit/zinit.zsh 加载 zinit。
Zinit has been installed in /usr/share/zinit.
Now you can use source /usr/share/zinit/zinit.zsh to load zinit in your zshrc.
====================================================================[!info]
可以从上面的提示看出,使用系统的包管理器安装 zinit,会被安装在根目录下。这不太好。
建议使用手动安装 zinit,这样可以安装在用户目录。
将 zinit 安装到用户目录中,原则是把 zinit 的 git 库下载到用户目录中安装。
其中两分两种方式:一种使用 install.sh 脚本自动安装;另一种手动下载安装。
- 使用
install.sh自动安装
bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"install.sh 会将 zinit 安装到 ~/.local/share/zinit/zinit.git,并会自动在 ~/.zshrc 中添加 zinit 初始化命令。
zinit 自升级:
zinit self-updateTip
raw.githubbuserconten.com 如果下载不了,可以使用 下载加速网站 对其加速下载。
如下:
bash -c "$(curl --fail --show-error --silent --location https://github.moeyy.xyz/https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"- 手动安装
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
[ ! -d $ZINIT_HOME ] && mkdir -p "$(dirname $ZINIT_HOME)"
[ ! -d $ZINIT_HOME/.git ] && git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
source "${ZINIT_HOME}/zinit.zsh"[!info]
zi是zinit的别名,所以如果懒得敲这么多字母,也可以使用zi命令代替。
zinit help自升级: ^3ddfcd
zinit self-update更新所有:
zinit update --all删除所有已安装的插件、snippet(慎用):
zinit delete --all清理所有未用到的包:
zinit delete --cleanload 命令用于加载并追踪插件
light 命令是更快的加载插件。一般跟着 GitHub 的「全限定」库名(格式:账号/库名)。
小示例:zinit light oskarkrawczyk/honukai-iterm-zsh,这里就light了一个主题,实际是将 https://github.com/oskarkrawczyk/honukai-iterm-zsh 这个库下载下来,并对其中的 .theme 文件进行加载。如果库中有多个 .theme 文件,那就需要 pick 命令对其选择加载了。
有时 load 或 light 一个插件,其库中有多个符合加载条件的文件,那需要选择其中一个加载,这时就用到了 pick 命令。
示例:
# zhiweichen0012/myys.zsh-theme这库中有两个theme
# 使用pick命令选择了 myys.zsh-theme这个文件进行加载
zinit ice pick"myys.zsh-theme"
zinit light zhiweichen0012/myys.zsh-theme[!info]
pick命令需要注意的是:pick命令与后面的""之间不要有空格。等写成pick"xxx"这样的形式。
GitHub - zsh-users/zsh-syntax-highlighting: Fish shell like syntax highlighting for Zsh. 是给命令「上色」。
高亮各种命令,为命令着色~与 zsh-syntax-highlighting 类似。 甚至能换不同的配色方案。
# 列出内置的配色方案清单
fast-theme -l
# 设置相应的配色方案
fast-theme 配色方案名使用 zinit 安装:
zinit light zdharma-continuum/fast-syntax-highlighting这个插件会搜索你输入的历史记录,以下载选项菜单显示。
Ctrl+r: 列出相应的历史记录的菜单列表Ctrl+n: 向下移动菜单候选项Ctrl+p: 向上移动候选项Ctrl+k/Enter:确认选中候选项并返回结果Ctrl+v: 取消搜索
# 每页候选项数量
zstyle ":history-search-multi-word" page-size "8"
# 高亮颜色
zstyle ":history-search-multi-word" highlight-color "fg=yellow,bold"
# 激活候选项样式 默认是下划线underline 另外还能设置:standout, bold, bg=blue
zstyle ":plugin:history-search-multi-word" active "underline"
输入命令历史 (浅色) 提示。
常用操作:
按方向键 -> 可补全。
可以设置显示样式:ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ff00ff,bg=cyan,bold,underline"
zsh-autocomplete 是一个自动补全插件。这个插件是「即时」提示的,每敲入一个字符,就会在下方显示补全信息。个人感觉过于「智能」,还是喜欢「手动」的 fzf-tab。
fzf-tab 这插件是利用 fzf 来为输入提示。所以在使用这插件前,系统得先安装好 fzf。
使用时,使用 tab 键就能触发。
这插件是大小写敏感的,如果想要忽略大小写敏感,可以有两种方式:
[!info] 相关资料
fzf-tab 具体配置参考:fzf-tab Wiki
[!info]
fzf-tab 得放在
compinit之后, zsh-autosuggestion 和 fast-syntax-highlighting 插件之前加载。
fzf-tab-source 是 fzf-tab 补全源插件。
zsh-plugin-condaenv 是为 zsh 的 主题 提供 conda 环境信息。
zsh-vi-mode 是一个让命令支持 vim 方式操作的插件。
操作方式与 vim 极其相似。
使用 ESC 或 Ctrl-[ 进入 普通模式
vi-mod 这插件的移动都是在 normal 模式下进行的。
u:撤销$: 跳到行尾^: 跳到行首非空字符0: 跳到行首w: [数字] 单词向前移动W: [数字] 大写单词向前移动e: 向前移动到单词尾 [数字]E: 向前移动到单词尾 [数字]b: [数量] 回跳一个单词B: [数量] 回跳一个单词
从 normal 模式进入插入模式,操作跟 vim 与完全相同。
[!info]
i、I、a、A、o和O完全一样。
vi-mod 这看插件更「骚」的,竟然还有简单地实现的 vim 的著名插件 Surround 的小部分功能。
具体查看官方文档:zsh-vi-mode#Surround
modesty 这个主题可以显示 conda 的env 信息。不过得配合安装 zsh-plugin-condaenv 插件。
alien 颜值挺不错的主题。
这个主题还有多种配色可选择。
myys 这个主题是 oh-my-zsh 经典主题ys的修改款。主要是增加了显示 conda 环境。
因为这个库有两个 theme 文件,所以得按需求选择一个 theme 来加载,配置如下:
zinit ice pick"myys.zsh-theme"
zinit light zhiweichen0012/myys.zsh-theme另外,还要在 .condarc 文件中增加一句代码:changeps1: false,用于 关闭显示环境名称。
[!info]
这代码是隐藏默认情况会在 prompt 上方显示当前 conda 环境,因为这个修改后的 ys 主题已经将 conda 环境显示「整合」进 prompt 中,所以这默认显示就可以关闭了。
类似的主题还有 taw-ys 这个主题。
还有这类似显示 conda 环境主题,都存在一个 _defer_async_git_register:4: command not found: _omz_register_handler。
GitHub 的 issue 上虽然有所谓的解决方法,就是作这个设置:zstyle ':omz:alpha:lib:git' async-prompt no,但实际是无效的。
个人解决方案,就是到主题文件中,找到 git_prompt_info,将其替换为 _omz_git_prompt_info:
# replace this line
BULLETTRAIN_GIT_PROMPT_CMD="\$(git_prompt_info)"
# to
BULLETTRAIN_GIT_PROMPT_CMD="\$(_omz_git_prompt_info)"使用 oh-my-zsh
因为 oh-my-zsh 的生态非常完善,无论是插件还是主题都有着深厚的积累,虽然后来出的插件逐步替代早期 oh-my-zsh 系的插件,但像主题什么的,有些经典的如 ys 主题,如果想在 zinit 中使用,就得通过一些特殊的方式加载 oh-my-zsh 部分插件。
加载oh-my-zsh 插件
# git lib
zinit snippet OMZL::git.zsh
zinit snippet OMZ::plugins/git/git.plugin.zsh
# oh-my-zsh 补全插件 忽略大小写、高亮候选项
zinit snippet OMZ::lib/completion.zsh
# 跟theme与样式相关
# 必须加载,不然OMZ的theme不生效
zinit snippet OMZ::lib/theme-and-appearance.zsh
# --------------------------------------------------------------------- #
# OMG Theme
# --------------------------------------------------------------------- #
zinit snippet OMZT::ys
# zinit snippet OMZT::muse
# zinit snippet OMZT::robbyrussell
# zinit snippet OMZT::steeef
# zinit snippet OMZT::af-magic
zinit 使用 oh-my-zsh 的插件,实际目录是放在 .local/share/zinit/snippets 这个目录中,各插件都是以 OMZ::plugins 开头:
$ ll .local/share/zinit/snippets
Permissions Size User Group Date Modified Name
drwxr-xr-x - silascript silascript 2024-04-16 19:34 .
drwx---r-x - silascript silascript 2024-02-22 23:21 ..
drwxr-xr-x - silascript silascript 2024-04-17 02:56 OMZ::lib
drwxr-xr-x - silascript silascript 2024-04-16 19:34 OMZ::plugins--git
drwxr-xr-x - silascript silascript 2025-08-10 00:58 OMZL::git.zsh
[!info]
就是个 zsh 的插件、主题集合库。
zinit ice as"completion"
zinit snippet https://github.com/docker/cli/blob/master/contrib/completion/zsh/_docker- ZSH 插件管理器 zinit 介绍及使用
- 不用上 Github 也能用 zinit 管理 zsh 插件
- 我的终端环境:推荐 6 个提升效率的 zsh 插件 - 知乎
- ZSH 系列教程 - Aloxaf's Blog
- zsh 中文文档
- Zsh 开发指南
- ZSH - Documentation






