我使用的终端工具

我一直有些不满于VS Code中启动terminal的缓慢, 大概1.5s左右(也许你觉得这个速度还可以接受, 但我是几乎绝对的速度主义), 对比起没有安转插件的原生bash几乎可以瞬间启动, 我一直想找时间好好优化一下我的终端配置, 速度永远是我的最爱🚀

# 旧的配置: oh-my-zsh + iTerm2

我之前一直使用的是这套社区推荐很广泛的搭配, 这套的社区生态很好, 也支持非常高度的定制化(虽然iTerm2没有沉浸模式, 指无窗口标题栏 & 无关闭按钮的那种, 但是我也忍了很久)

至于oh-my-zsh的插件,我常用的有这几个:

# 新的配置: zsh + starship + alacritty

# zsh or bash

zsh是基于bash构建的, 支持更丰富的配置, 速度也稍微快一些(据说), 所以我仍继续使用zsh, 但是要替换其上层的一些插件和工具

mac自带zsh, 所以无需任何安装步骤

# oh-my-zsh -> starship

虽然oh-my-zsh有着很好的社区生态和丰富的配置, 但是我找到了更适合我的替代品 - starship.

starship是使用Rust编写的(Rust在速度上再得一分🎉)的可适用于几乎所有的shellprompt, 在功能和支持的配置上虽然不然oh-my-zsh丰富, 但是已有的功能如prompt定制已经完全满足我的需求, 加上速度上的优势, 那当然是选择starship

# 安装starship

  1. 按照官网Installation章节安装
curl -sS https://starship.rs/install.sh | sh
  1. 然后需要在zsh的配置文件~/.zshrc中添加如下配置才能启用它
# in ~/.zshrc

eval "$(starship init zsh)"
  1. starship有一些内置的主题预设你可以直接使用, 当然也可以自行配置. 以下我自己的主题, 你可以拷贝到starship的配置文件~/.config/starship.toml中便会直接生效(或者重启终端)
# in ~/.config/starship.toml

format = """
[](blue)\
$directory\
[\u0020](bg:blue)\
[](fg:blue bg:red)\
$git_branch\ 
[](red)\
\u0020\
"""

[directory]
style = "bg:blue"
format = "[$path]($style)"
truncation_length = 0

[git_branch]
symbol = "\uf418"
style = "bg:red"
format = '[ $symbol $branch ]($style)'

# iTerm2 -> alacritty

虽然iTerm2支持非常丰富的自定义, 但是没有沉浸式窗口这一点我前面已经抱怨过了, 而alacritty是支持的, 然后也同样支持自定义主题. 另外很重要的一点是它也是Rust编写的(Rust win!🎉), 在启动速度上快的非常明显, 那当然是选择alacritty

# 安装alacritty

可以在Github的Releases下载安装包进行安装

然后可以在它的配置文件(~/.config/alacritty/alacritty.yml)中自定义配置主题等内容

(如果想查阅更完整详细的配置可以参考它的release中的alacritty.yml文件来了解有哪些配置可用)

# in ~/.config/alacritty/alacritty.yml

live_config_reload: true

window:
  padding:
    x: 10
    y: 15
  # decorations: full | none | transparent | buttonless
  decorations: buttonless

font:
  normal:
    family: "Iosevka Nerd Font Mono"
  size: 16

# Colors (Palette from `unocss`)
colors:
  # Primary colors
  primary:
    background: '0x22272d'
    foreground: '0xdee2e6'

  # Normal colors
  normal:
    black: '0x222222'
    red: '0xf87171'
    green: '0x4ade80'
    yellow: '0xfacc15'
    blue: '0x60a5fa'
    magenta: '0xe879f9'
    cyan: '0x22d3ee'
    white: '0xf1f3f5'

# zsh插件安装

因为之前是使用oh-my-zsh来管理的插件, 所以当我直接使用zsh后原先的插件都需要改用"手动安装"这种方式, here we go!

# autojump

  1. 按照插件文档INSTALLATION安装, (在mac上可使用brew安装)
brew install autojump
  1. 安装完成后注意输出的日志 (这的确容易忽略, 然后不知道下一步该如何, 但是官方似乎不打算修改这种引导方式)
...
Add the following line to your ~/.bash_profile or ~/.zshrc file:
  [ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh

If you use the Fish shell then add the following line to your ~/.config/fish/config.fish:
  [ -f /usr/local/share/autojump/autojump.fish ]; and source /usr/local/share/autojump/autojump.fish

Restart your terminal for the settings to take effect.
...

按照日志提示拷贝[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh~/.zshrc中就完成了插件的安装和配置

# in ~/.zshrc

[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh

# zsh-autosuggestions

  1. 按照插件文档INSTALL - Manual (Git Clone)安装
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
  1. 打开~/.zshrc文件添加配置后就完成了插件的安装和配置
# in ~/.zshrc

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# git

由于我日常使用的git快捷操作命令就那几条, 所以我不打算再像原来那样安装插件那么麻烦, 而是直接从插件源码里面拷贝出我常用的几条命令作为别名(alias)就够用了, 例如:

# in ~/.zshrc

alias gcam='git commit --all --message'
alias gco='git checkout'
alias gcb='git checkout -b'
alias gm='git merge'
alias gl='git pull'
alias gp='git push'

# NVM

上面说过nodejs官方的NVM对于终端启动速度的影响, 所以这次我使用了社区的懒加载版本zsh-nvm来代替它.

zsh-nvm可以懒加载NVM, 在实际使用到该命令的时候再初始化NVM, 当然你需要配置一下才能启用懒加载

  1. 按照插件文档Installation - Manually安装
git clone https://github.com/lukechilds/zsh-nvm.git ~/.zsh-nvm
  1. 打开~/.zshrc文件添加配置后就完成了插件的安装和配置
# in ~/.zshrc

# Load NVM lazily(works with zsh-nvm)
export NVM_LAZY_LOAD=true
# Disable NVM auto completion(works with zsh-nvm)
export NVM_COMPLETION=false

source ~/.zsh-nvm/zsh-nvm.plugin.zsh

# ~/.zshrc最终配置

# in ~/.zshrc

# ENV
# Load NVM lazily(works with zsh-nvm)
export NVM_LAZY_LOAD=true
# Disable NVM auto completion(works with zsh-nvm)
export NVM_COMPLETION=false

# alias
# npm scripts
alias nio="ni --prefer-offline"
alias d="nr dev"
alias s="nr start"
alias b="nr build"
# git
alias gcam='git commit --all --message'
alias gco='git checkout'
alias gcb='git checkout -b'
alias gm='git merge'
alias gl='git pull'
alias gp='git push'
# cd to workspace
alias w="j workspace"
# open sourcetree
alias st="open -a SourceTree ."
# clean screen
alias c="clear && printf '\e[3J'"

# PLUGIN
# provide auto completion
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
# lazy load nvm
source ~/.zsh-nvm/zsh-nvm.plugin.zsh
# syntax highlighting
source ~/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# autojump
[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh

# starup starship
eval "$(starship init zsh)"

# 总结

舒服多了, 现在的启动速度已经很接近原生bash, 感官上延迟大约在100ms内, 这次的搭配应该可以再顶一段时间到下次再折腾配置

我对Rust还挺有好感的, 之前也学习过一段时间的Rust并用它写了个静态博客站点编译工具, 在速度上的优势深得我心, 每当看到使用Rust构建的工具总会第一印象心生好感 ✨

顺便提一句最近看到的Vite Conf上介绍之后会使用基于Rust构建的新编译打包工具Rolldown, 会用来解决Vite长期存在的一些打包问题, 我还是挺期待的.