mini折腾记(六):打造效率爆表的终端环境

mini折腾记(六):打造效率爆表的终端环境

上一篇文章里,我用Docker容器化了所有数据库,数据统一存储在外置硬盘,管理起来非常方便。

现在开发环境基本搭建完成了,但还有一个地方需要优化:终端。

Windows上的终端体验

在Windows上,我用的是PowerShell和Windows Terminal。

说实话,Windows Terminal已经很不错了,支持多标签、分屏、自定义主题。但它有几个问题:

  1. 命令提示符很朴素:只显示当前路径,看不出当前在哪个Git分支
  2. 历史命令搜索不方便:按上箭头翻历史命令,很慢
  3. 没有AI辅助:忘记命令怎么写,只能去Google
  4. 输出不好看:所有输出都是纯文本,没有语法高亮

换到Mac后,我发现Mac的默认终端更简陋。虽然可以用iTerm2,但我想找一个更现代化的方案。

发现Warp

我在网上搜索"Mac最好用的终端",看到很多人推荐Warp。

Warp是一个新一代的终端,它的特点是:

  • 现代化的UI设计
  • 内置AI辅助
  • 命令和输出以"块"的形式呈现
  • 支持命令自动补全

我下载试用了一下,立刻被它的体验吸引了。

Warp的核心功能

1. 块编辑模式

在传统终端里,命令和输出混在一起,很难区分。

在Warp里,每个命令和它的输出是一个独立的"块"。你可以:

  • 单独复制某个命令
  • 单独复制某个输出
  • 折叠某个输出(如果输出很长)
  • 给某个块添加书签

这个功能看起来简单,但用起来非常方便。

2. AI命令搜索

这是Warp的杀手级功能。

Ctrl + ~(波浪号键),会弹出一个AI对话框。你可以用自然语言问问题,Warp会生成对应的命令。

比如:

  • 问:“怎么查看当前目录下最大的5个文件?”
  • Warp回答:du -sh * | sort -rh | head -5

比Google快多了。

3. 命令自动补全

Warp会根据你的历史命令和当前上下文,自动补全命令。

比如你输入docker,它会提示你最常用的docker psdocker images等命令。

Tab键接受补全,按Cmd + →直接跳到补全的末尾。

4. 历史命令搜索

Ctrl + R,可以模糊搜索历史命令。

这个功能其实很多终端都有(通过fzf实现),但Warp是原生支持的,不需要额外配置。

5. 快捷键手册

Cmd + /,可以查看所有快捷键。

这对新手非常友好,不需要去网上查文档。

Warp的设置

Warp的设置很简单,按Cmd + ,打开设置页面。

我主要调整了这几个地方:

1. 主题

Warp自带了很多主题,我选择了"One Dark"(和VS Code的主题一致)。

2. 字体

我把字体改成了"JetBrains Mono"(一个专为编程设计的等宽字体,支持连字)。

3. 启动时的工作目录

我把启动时的工作目录改成了/Volumes/DataDisk/Projects,这样每次打开终端就直接在项目目录下。

4. AI功能

Warp的AI功能是免费的,但有使用次数限制(每天50次)。对于日常使用来说,完全够用。

如果你不想用AI功能,可以在设置里关闭。

美化命令提示符:Starship

Warp的默认提示符已经比Mac的默认终端好看多了,但我还想更进一步。

我想要一个提示符,能显示:

  • 当前路径
  • 当前Git分支
  • Git状态(有没有未提交的修改)
  • 当前使用的编程语言版本(Node、Python、Java等)

我找到了Starship。

Starship是什么?

Starship是一个跨平台的命令行提示符工具,用Rust写的,速度很快。

它的特点是:

  • 开箱即用,几乎不需要配置
  • 自动检测当前目录的环境(Git仓库、Node项目、Python项目等)
  • 显示相关信息(Git分支、Node版本、Python版本等)
  • 支持自定义配置

安装Starship

安装很简单:

1
brew install starship

然后在~/.zshrc末尾添加一行:

1
eval "$(starship init zsh)"

重新加载配置:

1
source ~/.zshrc

就这么简单,不需要任何配置。

Starship的效果

安装完Starship后,我的提示符变成了这样:

1
2
~/Projects/my-project on main [!?] via ⬢ v22.22.0

这一行包含了很多信息:

  • ~/Projects/my-project:当前路径
  • on main:当前Git分支是main
  • [!?]:Git状态(!表示有修改,?表示有未跟踪的文件)
  • via ⬢ v22.22.0:当前使用的Node版本是22.22.0

所有这些信息都是自动检测的,不需要手动配置。

如果我进入一个Python项目,提示符会自动显示Python版本:

1
2
~/Projects/python-project on main via 🐍 v3.13.11

如果我进入一个非Git目录,Git相关的信息就不会显示:

1
2
~/Downloads

Starship会根据当前目录的环境,智能地显示相关信息。

Starship的配置(可选)

Starship的默认配置已经很好用了,但如果你想自定义,可以创建一个配置文件。

配置文件的路径是~/.config/starship.toml

我没有做太多自定义,只是调整了一下颜色和图标。如果你想深度定制,可以参考Starship的官方文档。

命令行效率工具

终端美化好了,接下来要装一些效率工具,让日常操作更快。

1. bat - 带语法高亮的cat

在Windows上,我用typecat查看文件内容,但输出都是黑白的。

在Mac上,我装了bat,它是cat的现代化替代品。

bat的特点:

  • 自动语法高亮(支持几百种编程语言)
  • 显示行号
  • 显示Git修改(如果文件在Git仓库里)
  • 支持分页(文件很长时自动分页)

使用示例:

1
2
# 查看一个JavaScript文件
bat package.json

输出会自动高亮,JSON的键是蓝色,值是绿色,非常清晰。

创建别名:

我在~/.zshrc里创建了一个别名,让cat命令自动调用bat

1
alias cat="bat"

这样以后输入cat,实际上执行的是bat

2. eza - 更美观的ls

ls是最常用的命令之一,但Mac的默认ls输出很朴素。

ezals的现代化替代品,用Rust写的。

eza的特点:

  • 彩色输出(文件夹是蓝色,可执行文件是绿色)
  • 显示文件图标(需要Nerd Font字体)
  • 显示Git状态
  • 支持树状显示

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 普通列表
eza

# 详细列表
eza -l

# 显示隐藏文件
eza -la

# 树状显示
eza --tree

创建别名:

1
2
3
4
alias ls="eza"
alias ll="eza -l"
alias la="eza -la"
alias lt="eza --tree"

现在输入ls,输出会自动彩色显示,一眼就能看出哪个是文件夹、哪个是文件。

3. fd - 更快的find

find命令很强大,但语法复杂,而且速度慢。

fdfind的现代化替代品,用Rust写的。

fd的特点:

  • 语法简单(不需要记复杂的参数)
  • 速度快(比find快很多)
  • 自动忽略.gitnode_modules等目录
  • 支持正则表达式

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 搜索文件名包含"config"的文件
fd config

# 搜索所有.js文件
fd "\.js$"

# 搜索所有.js文件,包括隐藏文件
fd -H "\.js$"

# 在指定目录搜索
fd config /Volumes/DataDisk/Projects

find简单多了。

4. ripgrep (rg) - 更快的grep

grep用来搜索文件内容,但速度慢,而且不会自动忽略不需要搜索的目录。

ripgrep(简称rg)是grep的现代化替代品,用Rust写的。

ripgrep的特点:

  • 速度极快(比grep快几十倍)
  • 自动递归搜索
  • 自动忽略.gitnode_modules等目录
  • 支持正则表达式
  • 彩色输出

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 在当前目录及子目录搜索包含"TODO"的文件
rg "TODO"

# 只搜索.js文件
rg "TODO" -t js

# 搜索并显示上下文(前后3行)
rg "TODO" -C 3

# 搜索并显示文件名和行号
rg "TODO" -n

我现在搜索代码,都用rg,比grep快太多了。

5. zoxide - 智能cd

cd是最常用的命令,但每次都要输入完整路径很麻烦。

zoxidecd的智能替代品,用Rust写的。

zoxide的特点:

  • 记住你常去的目录
  • 可以用模糊匹配跳转
  • 不需要输入完整路径

使用示例:

假设我经常去/Volumes/DataDisk/Projects/my-project这个目录。

用传统的cd

1
cd /Volumes/DataDisk/Projects/my-project

zoxide

1
z my-proj

只需要输入目录名的一部分,zoxide会自动跳转到最匹配的目录。

注意: zoxide需要时间学习你的习惯。刚装的时候,它不知道你常去哪些目录,需要你先用cd去几次,它才能记住。

用了一段时间后,zoxide会越来越智能。

6. tldr - 简化版man手册

man命令可以查看命令的帮助文档,但信息太多,很难找到想要的内容。

tldr(Too Long; Didn’t Read)是简化版的man手册,只显示最常用的例子。

使用示例:

1
2
# 查看tar命令的用法
tldr tar

输出:

1
2
3
4
5
6
7
8
9
10
11
12
tar

压缩和解压文件

- 压缩文件:
tar -czf archive.tar.gz file1 file2

- 解压文件:
tar -xzf archive.tar.gz

- 查看压缩包内容:
tar -tzf archive.tar.gz

只显示最常用的几个例子,一看就懂。

man tar(输出几百行)实用多了。

7. btop - 系统监控工具

btop是一个系统监控工具,类似Windows的任务管理器。

btop的特点:

  • 显示CPU、内存、磁盘、网络使用情况
  • 显示所有进程
  • 可以杀进程
  • 界面美观

使用:

1
btop

会打开一个全屏界面,显示系统资源使用情况。

q退出。

我一般不常用,但偶尔需要查看系统资源时,btop比Mac的"活动监视器"方便。

Git工具优化

作为开发者,Git是每天都要用的工具。我配置了几个工具,让Git使用体验更好。

1. lazygit - Git的TUI界面

lazygit是一个Git的终端UI工具,可以用键盘操作Git,不需要记命令。

lazygit的特点:

  • 可视化显示Git状态
  • 用键盘操作(不需要鼠标)
  • 支持所有Git操作(add、commit、push、pull、merge等)
  • 显示Git历史

使用:

1
2
cd /Volumes/DataDisk/Projects/my-project
lazygit

会打开一个全屏界面,显示当前仓库的状态。

常用操作:

  • 空格:stage/unstage文件
  • c:commit
  • p:push
  • P:pull
  • q:退出

我现在做简单的Git操作(add、commit、push),都用lazygit,比命令行快。

2. delta - Git diff美化

Git的默认diff输出是纯文本,很难看清楚改了什么。

delta是一个Git diff美化工具,可以让diff输出更清晰。

delta的特点:

  • 语法高亮
  • 并排显示(side-by-side)
  • 显示行号
  • 显示Git blame信息

配置:

~/.gitconfig里添加:

1
2
3
4
5
6
7
8
9
10
[core]
pager = delta

[interactive]
diffFilter = delta --color-only

[delta]
navigate = true
line-numbers = true
side-by-side = true

配置完成后,运行git diff,输出会自动美化。

3. GitHub CLI (gh)

gh是GitHub官方的命令行工具,可以在终端里操作GitHub。

gh的常用功能:

  • 创建仓库
  • 创建PR
  • 查看issue
  • 克隆仓库

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 克隆仓库(不需要输入完整URL)
gh repo clone username/repo

# 创建PR
gh pr create

# 查看PR列表
gh pr list

# 查看issue列表
gh issue list

我现在克隆GitHub仓库,都用gh repo clone,比复制URL快。

创建实用的别名

配置好所有工具后,我在~/.zshrc里创建了一些常用的别名,让日常操作更快。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# ============================================
# 命令行工具别名
# ============================================

# 用 bat 替代 cat
alias cat="bat"

# 用 eza 替代 ls
alias ls="eza"
alias ll="eza -l"
alias la="eza -la"
alias lt="eza --tree"

# Git 别名
alias gs="git status"
alias ga="git add"
alias gc="git commit"
alias gp="git push"
alias gl="git pull"
alias gd="git diff"
alias gco="git checkout"
alias gb="git branch"
alias glg="git log --graph --oneline --decorate"

# Docker 别名
alias dps="docker ps"
alias dpa="docker ps -a"
alias di="docker images"
alias dcu="docker-compose up -d"
alias dcd="docker-compose down"
alias dcl="docker-compose logs -f"

# 快速跳转
alias proj="cd /Volumes/DataDisk/Projects"
alias dev="cd /Volumes/DataDisk/DevEnv"

# 其他实用别名
alias c="clear"
alias h="history"
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."

现在我想查看Git状态,只需要输入gs,比git status快多了。

实际使用体验

配置完这些工具后,我的终端使用体验提升了一个档次。

场景1:查看代码

以前:

1
cat src/index.js

输出是黑白的,看不清结构。

现在:

1
cat src/index.js

输出自动语法高亮,关键字是蓝色,字符串是绿色,注释是灰色,一眼就能看清代码结构。

场景2:搜索文件

以前:

1
find . -name "*config*"

输出包含node_modules里的文件,很乱。

现在:

1
fd config

自动忽略node_modules,只显示我关心的文件。

场景3:搜索代码

以前:

1
grep -r "TODO" .

速度慢,而且输出包含node_modules里的文件。

现在:

1
rg "TODO"

速度快,自动忽略node_modules,输出还有颜色。

场景4:Git操作

以前:

1
2
3
4
git status
git add .
git commit -m "fix: update config"
git push

需要输入4个命令。

现在:

1
lazygit

打开lazygit,按几个键就完成了。

场景5:跳转目录

以前:

1
cd /Volumes/DataDisk/Projects/my-project

需要输入完整路径。

现在:

1
z my-proj

只需要输入目录名的一部分。

小结

从Windows转到Mac,终端是一个很大的变化。

Windows上的PowerShell和Windows Terminal已经很不错了,但Mac上有更好的选择。

通过配置Warp、Starship和一系列命令行工具,我的终端使用体验比Windows上好太多了。

现在我的终端有:

  • 现代化的UI(Warp)
  • 美观的提示符(Starship)
  • 高效的文件操作(bat、eza、fd、ripgrep)
  • 智能的目录跳转(zoxide)
  • 便捷的Git操作(lazygit、delta、gh)

这些工具都是开源免费的,而且跨平台(Windows、Mac、Linux都能用)。

如果以后我要在Linux服务器上工作,也可以用同样的配置。

现在,我的Mac mini已经完全配置好了:

  • 硬件选购和系统设置(第一、二章)
  • 窗口管理和快捷键(第三章)
  • 开发语言版本管理(第四章)
  • 数据库容器化(第五章)
  • 终端工具优化(第六章)

这才是我想要的开发环境。

下一篇文章,我会讲如何配置IDE(VS Code、Cursor、IntelliJ IDEA),以及一些开发中的实用技巧。