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
的脚本。