
配置 shell
终端环境通常由 Terminal、Shell 和 Terminal Multiplexer 三个部分组成。
Terminal 负责窗口、字体、输入输出以及渲染;Shell 负责命令解释和交互;Terminal Multiplexer 则负责管理多个终端会话、窗口和 Pane。
日常开发中,Shell 主要关注命令补全、历史记录、目录切换等操作,而 tmux、Zellij 这类工具则解决多终端组织和 Session 持久化的问题。
本文主要整理 Zsh、Fish、Antigen、fzf、tmux 和 Zellij 的配置方式,以及这些配置实际解决的问题。
Shell
Shell 是终端环境中最直接的一层。常见选择包括 Zsh 和 Fish。
Zsh
Zsh 在 Bash 的使用习惯基础上提供了更加丰富的补全、历史和交互能力,也是目前比较常见的开发环境 Shell。
Zsh 的主要配置文件是:
~/.zshrc |
常见的环境变量、alias、补全以及插件都可以放在这里。
一个比较基础的配置结构:
# ~/.zshrc |
将配置按照功能分区以后,后续增加工具会比较容易维护。
Antigen
Antigen 用于管理 Zsh 插件。
基本配置:
source ~/.antigen/antigen.zsh |
antigen bundle 用于声明需要加载的插件,antigen apply 负责应用配置。
这种方式可以避免把插件脚本直接复制进 .zshrc,插件的安装和更新也更加集中。
zsh-autosuggestions 根据历史命令提供自动建议。
例如输入:
git che |
Shell 会根据历史记录给出类似的建议:
git checkout feature/xxx |
使用方向键即可接受建议,从而减少重复输入。
zsh-syntax-highlighting 用于实时显示命令行语法。
常见情况下,正确的命令和参数会以不同的样式显示,拼写错误的命令也可以在执行之前发现。
对于比较长的编译、测试和 Git 命令,这个功能尤其方便。
fzf
fzf 是独立的命令行模糊搜索工具,并不属于 Antigen。
安装以后,可以启用 Zsh integration:
source <(fzf --zsh) |
常见的快捷键包括:
Ctrl-R 搜索历史命令 |
其中 Ctrl-R 可以快速从历史命令中找到之前执行过的复杂命令。
fzf 也可以和其他命令组合使用,例如:
find . -type f | fzf |
这里 find 负责生成候选列表,fzf 负责交互式选择。
fzf-tab 解决的是另一个问题:将 Zsh completion 与 fzf 结合。
在 ~/.zshrc 里添加到 antigen apply 之前的插件区域里:
antigen bundle Aloxaf/fzf-tab |
原本通过 <Tab> 展开的候选项可以使用模糊搜索进行筛选。
git checkout <Tab> |
当候选分支比较多时,可以直接输入关键字进行过滤。
zoxide 用于改进目录切换。
Zsh:
eval "$(zoxide init zsh)" |
之后可以:
z kwin |
zoxide 会根据历史访问记录定位目录。
相比频繁输入:
cd ~/src/project/... |
这种方式更适合项目目录较多、路径层级较深的开发环境。
常用配置
一个比较完整的 Zsh 配置可以整理成:
# ~/.zshrc |
实际使用时,还可以根据环境加入 PATH、代理、编译工具链以及项目相关的环境变量。
Terminal Multiplexer
Shell 主要负责命令交互,而 Terminal Multiplexer 更适合管理多个长期运行的终端。
典型工作环境可能包含:
Window 1 |
这样即使 SSH 连接断开,Session 中运行的任务也可以继续执行。
tmux
tmux 是使用非常广泛的 Terminal Multiplexer。
配置文件:
~/.tmux.conf |
基础配置
常用配置:
# Prefix |
这里主要调整几个高频操作。
Prefix 从默认的 Ctrl-B 改成 Ctrl-A,Pane 导航使用 Vim 风格的 h/j/k/l,同时启用鼠标和较大的历史缓冲区。
TPM
tmux 本身同样拥有插件生态。
TPM(Tmux Plugin Manager)用于管理 tmux 插件。
安装:
git clone https://github.com/tmux-plugins/tpm \ |
配置:
set -g @plugin 'tmux-plugins/tpm' |
安装插件后,可以使用:
Prefix + I |
安装插件。
Session 持久化
tmux-resurrect 用于保存和恢复 tmux Session。
set -g @plugin 'tmux-plugins/tmux-resurrect' |
手动保存和恢复:
Prefix + Ctrl-S |
tmux-continuum 则可以进一步自动保存:
set -g @plugin 'tmux-plugins/tmux-continuum' |
这样可以让 tmux 工作空间长期保持。
在这里插一句,session 在这里的作用是用来快速恢复工作场景的,比如说正常因为网络环境断开导致的 tmux 断链,我们只需要重新 attach 上去就可以了,但是如果机器重启了呢?这个时候就可以使用 session 恢复功能,快速将 tmux 的状态恢复到一个快照状态,布局、运行的程序记录等。
比如说我使用 tmux new -s 创建多个不同的 session,kwin、treeland、agent 等,每个 session 之间可以互相隔离,并且有不同的布局,运行不同的程序,当机器重启了,我就可以使用恢复功能,而不必手动一个一个的创建布局了。
Vim 导航
如果终端中经常使用 Vim 或 Neovim,可以使用:
set -g @plugin 'christoomey/vim-tmux-navigator' |
这样可以统一使用:
Ctrl-H |
在 Vim 窗口和 tmux Pane 之间移动。
常用配置
综合起来:
# ~/.tmux.conf |
Zellij
Zellij 也是一个 Terminal Multiplexer,配置文件使用 KDL 格式。
配置文件
默认配置目录:
~/.config/zellij/ |
主要配置文件:
~/.config/zellij/config.kdl |
基础配置
例如:
pane_frames false |
常见配置包括:
pane_frames |
Layout
Zellij 的一个重要功能是 Layout。
可以将一个开发环境描述成固定布局:
┌──────────────────────┐ |
然后通过 Layout 文件直接恢复。
这样就不需要每次进入项目以后重新创建 Pane。
常用配置
Zellij 配置可以继续向 Layout、Keybind、Plugin 等方向扩展。
最开始使用时,只需要配置:
pane_frames false |
已经可以覆盖比较常见的终端操作需求。
一个完整的终端环境
将这些工具组合起来,可以形成比较完整的开发环境:
Terminal |
这些工具并不需要全部同时启用。
Shell 层主要解决命令输入、补全、历史搜索和目录切换。Terminal Multiplexer 层主要解决终端组织、Session 管理和工作环境持久化。
最终可以根据自己的开发环境,将配置集中到 dotfiles 中统一管理:
dotfiles/ |
这样换机器或者重新部署开发环境时,只需要恢复这一套配置即可。
%20long_hair%20murata_ryou%20purple_eyes%20skirt%20thighhighs%20tie%20white_hair%20zettai_ryouiki.jpg)
%20zero_two.jpg)
