viasite-ansible.zsh
在 Ubuntu 20.04、Ubuntu 22.04、Ubuntu 24.04 和 MacOS 14.4 上进行了测试。
很久以前在 Ubuntu 18.04、MacOS 10.12 和 CentOS 8 上进行了测试。
对于从 viasite-ansible.zsh 1.x、2.x 升级到 3.0 的用户,请参见 下面。
零实践安装:
如果你在使用 Ubuntu 或 Debian,并且不熟悉 Ansible,你可以在目标机器上执行 install.sh:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install.sh | bash
这将安装 pip3、ansible,并为 root 用户和当前用户设置 zsh。
MacOS 零实践安装:
要求:brew、python。系统会询问用户的密码。install-macos.sh 将安装 ansible,并为当前用户及可选的 root 用户设置 zsh:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install-macos.sh | bash
然后 配置终端应用程序。
包含:
- zsh
- antigen
- oh-my-zsh
- powerlevel9k 主题
- zsh-autosuggestions
- zsh-syntax-highlighting
- unixorn/autoupdate-antigen.zshplugin
- sorenson-axial/fzf-widgets
- urbainvaes/fzf-marks
特性
- 自定义 powerlevel9k 主题提示段和颜色
- 默认颜色经过 solarized dark 和 putty 的灰色终端测试
- 从 yml 添加自定义提示元素
- 使用
~/.zshrc.local或/etc/zshrc.local自定义 zsh 配置 - 加载
/etc/profile.d脚本 - 仅安装对你的机器有用的插件。例如,如果你没有安装 Docker,插件
docker将不会被安装。
1.5 分钟演示

颜色方案

Midnight Commander Solarized Dark 主题
如果你在使用 Solarized Dark 主题并且在使用 mc,你应该安装主题,并设置 zsh_mc_solarized_skin: yes。
在 Vagrant 中演示安装
你可以在真实机器上安装之前测试角色的工作。
只需执行 vagrant up,然后使用 vagrant ssh 进入虚拟机。
注意:你不能在 Digital Ocean 等 VPS 或 Docker 上安装 vagrant。请使用本地机器。 下载 并为你的操作系统安装 vagrant。
真实机器安装
零实践安装:请参见 上面。
手动安装
- 安装 Ansible。 对于 Ubuntu:
sudo apt update
sudo apt install python3-pip -y
sudo pip3 install ansible
- 下载角色:
ansible-galaxy install viasite-ansible.zsh --force
- 编写 playbook 或使用 playbook.yml:
- hosts: all
vars:
zsh_antigen_bundles_extras:
- nvm
- joel-porquet/zsh-dircolors-solarized
zsh_autosuggestions_bind_key: "^U"
roles:
- viasite-ansible.zsh
- 执行 playbook:
ansible-playbook -i "localhost," -c local -K playbook.yml
如果你想为 macOS 的 root 用户配置角色,你应手动安装软件包:
brew install zsh git wget
这将为 ansible 远程用户安装 zsh 环境。如果你想为其他用户设置 zsh,应该定义变量 zsh_user:
通过 playbook:
- hosts: all
roles:
- { role: viasite-ansible.zsh, zsh_user: otheruser }
- { role: viasite-ansible.zsh, zsh_user: thirduser }
或通过命令:
ansible-playbook -i hosts zsh.yml -e zsh_user=otheruser
- 安装 fzf 无 shell 扩展,下载二进制文件或在 macOS 上
brew install fzf。
注意:我不使用 tmux-fzf,也没有测试它的工作情况。
多用户共享安装
如果你的主机上有 10 个以上的用户,可能不希望管理数十个配置和成千上万个文件。
在这种情况下,你可以部署单个 zsh 配置并将其包含到所有用户中。
这会导致一些限制:
- 用户对 zsh 配置仅具有只读访问权限
- 用户无法禁用全局启用的插件
- 可能出错,例如缓存写入权限被拒绝
- 与 oh-my-zsh 主题可能会出现错误
要安装共享配置,你应设置 zsh_shared: yes。
配置将安装到 /usr/share/zsh-config,你只需将其包含到用户配置中:
为所有用户安装
设置 zsh_source_for_all_users: yes
source /usr/share/zsh-config/.zshrc
你仍然可以为几个用户配置自定义设置。
配置
你不应编辑 ~/.zshrc!
将你的自定义配置添加到 ~/.zshrc.local(每个用户)或 /etc/zshrc.local(全局)。
.zshrc.local 将不会被 ansible 更改。
配置终端应用程序
下载 powerline 字体,并安装你喜欢的字体。 你可以在 这里 查看截图。
设置颜色方案。
个人而言,我更喜欢 Solarized Dark 颜色方案,在 iTerm 中使用 Droid Sans Mono for Powerline,在 Putty 中使用 DejaVu Sans Mono。
iTerm
配置 - 文本 - 更改字体 - 选择 "for Powerline" 字体
配置 - 颜色 - 颜色预设... - 选择 Solarized Dark
Putty
设置 - 窗口 - 外观 - 字体设置
你可以下载 Solarized Dark for Putty。
Gnome Terminal
gnome-terminal 内置 Solarized Dark,注意你应该同时选择背景颜色方案和调色板方案。
热键
你可以在 defaults/main.yml 中查看热键,zsh_hotkeys。
热键定义示例:
- { hotkey: '^r', action: 'fzf-history' }
# 带有插件依赖
- { hotkey: '`', action: autosuggest-accept, bundle: zsh-users/zsh-autosuggestions }
将 autosuggest-accept 设置为 ` 热键是有用的,但它与 Midnight Commander 冲突(打破 Ctrl+O 子外壳)。
你可以使用变量 zsh_hotkeys_extras 添加自定义热键,而不替换默认热键:
zsh_hotkeys_extras:
- { hotkey: '^[^[[D', action: backward-word } # alt+left
- { hotkey: '^[^[[C', action: forward-word } # alt+right
# 示例 <Ctrl。.><Ctrl+,> 从上一个命令的末尾插入第二个参数
- { hotkey: '^[,', action: copy-earlier-word } # ctrl+,
别名
你可以使用别名来轻松部署你的命令。 别名配置与热键配置基本相同:
zsh_aliases:
- { alias: 'dfh', action: 'df -h | grep -v docker' }
# 带有插件依赖并且不替换默认别名
- zsh_aliases_extra
- { alias: 'dfh', action: 'df -h | grep -v docker', bundle: }
默认热键来自插件:
- → - 接受自动建议
- Ctrl+Z - 将当前应用程序移至后台,再次按下以返回前台
- Ctrl+G - 跳转到书签目录。在目录中使用
mark添加到书签 - Ctrl+R - 显示命令历史
- Ctrl+@ - 显示所有 fzf-widgets
- Ctrl+@,C - fzf-change-dir,快速按下!
- Ctrl+\ - fzf-change-recent-dir
- Ctrl+@,G - fzf-change-repository
- Ctrl+@,F - fzf-edit-files
- Ctrl+@,. - fzf-edit-dotfiles
- Ctrl+@,S - fzf-exec-ssh(使用你的 ~/.ssh/config)
- Ctrl+@,G,A - fzf-git-add-file
- Ctrl+@,G,B - fzf-git-checkout-branch
- Ctrl+@,G,D - fzf-git-delete-branches
配置插件
你可以在 defaults/main.yml 中查看默认插件。
如果你喜欢默认插件,但想添加自己的插件,可以使用 zsh_antigen_bundles_extras 变量(请参见上面的示例 playbook)。
如果你想移除某些默认插件,应该使用 zsh_antigen_bundles 变量。
列表格式符合 antigen。以下所有变体有效:
- docker # oh-my-zsh 插件
- zsh-users/zsh-autosuggestions # 来自 github 的插件
- zsh-users/[email protected] # 来自 github 的指定版本插件
- ~/projects/zsh/my-plugin --no-local-clone # 来自本地目录的插件
请注意,插件可以使用加载条件。有两种类型的条件:
- 命令条件。只需将
command添加到插件:
- { name: docker, command: docker }
- name: docker-compose
command: docker-compose
插件 docker 和 docker-compose 仅在目标系统上存在相应命令时将被添加到配置中。
- 何时条件。你可以像在任务中定义
when一样定义任何 ansible 条件:
# 仅在 zsh >= 4.3.17 时加载
- name: zsh-users/zsh-syntax-highlighting
when: "{{ zsh_version is version_compare('4.3.17', '>=') }}"
# 仅在 macOS 时加载
- { name: brew, when: "{{ ansible_os_family != 'Darwin' }}" }
注意:你应将条件包装在 "{{ }}" 中。
自定义配置
你可以将任何代码添加到变量 zsh_custom_before、zsh_custom_after 中。
- zsh_custom_before - 在引入 antigen.zsh 之前
- zsh_custom_after - 在引入 ~/.zshrc.local 之前
升级
viasite-ansible.zsh v3.0 引入了 antigen v2.0,不兼容 antigen 1.x。
我没有花太多时间进行平滑升级,因此你可能需要做一些手动操作:
如果在配置角色后未加载 powerlevel9k 提示,您应该执行 antigen reset。
重新打开 shell 之后,一切应该就绪。
降级到 antigen v1
Antigen v2 启动速度快(启动速度提高至 2 倍),但如果出现问题,你可以降级到 antigen v1, 有关 zsh 4.3 用户的注意事项请参见下文。
对于 zsh 4.x 用户
Antigen v2 不适用于 zsh < 5.0,如你使用 zsh 4.x,请在你的 playbook 中添加:
zsh_antigen_version: v1.4.1
已知错误
su username 引发错误
请参见 antigen 问题。
如果 root 用户和 su 用户都使用 antigen,你应该用 su - username 替代 su username。
或者,你可以使用捆绑别名 suser。
你也可以尝试修复,在 ~/.zshrc.local 中添加:
alias su='su -'
但这个别名可能会破坏你使用 su 的脚本。
