iTerm2 完全指南(三):用快 — 日常操作提效

前面的文章把 iTerm2 装好了、配好了,但很多人日常用终端还是慢。常见的问题有这些:

  1. 切来切去靠鼠标 — 明明有分屏,却还在多个窗口之间用鼠标点来点去,效率很低。
  2. 重复命令反复敲git statuscd ../..ls -la 这种命令一天打几十遍,手指头都累了。
  3. Git 操作全靠命令行 — add、commit、push 每次都要手动输入完整命令,偶尔还拼错。
  4. 历史命令翻不到 — 昨天跑的那个很长的命令,今天想找却怎么也翻不出来。

这篇把日常操作的效率拉上去。

快捷操作

常用快捷键速查

iTerm2 的快捷键很多,但日常真正高频使用的就那几个。下面按场景分组,每组中标 ⭐ 的是最常用的三个,优先记住它们就够了。

标签页管理

快捷键功能使用频率
⌘T新建标签页
⌘W关闭当前标签页
⌘+数字切换到第 N 个标签页
⌘← / ⌘→切换到上一个/下一个标签页
⌘⇧[ / ⌘⇧]切换到上一个/下一个标签页(alternative)

分屏操作

快捷键功能使用频率
⌘D垂直分屏
⌘⇧D水平分屏
⌘[ / ⌘]在分屏之间切换
⌘⌥←↑↓→切换到指定方向的分屏
⌘⇧Enter最大化/还原当前分屏

搜索与历史

快捷键功能使用频率
⌘F搜索当前终端内容
⌘⇧H查看粘贴历史
⌘⇧;查看命令历史
⌘;自动补全
⌘⇧/在 man page 中搜索

分屏操作详解

分屏是 iTerm2 最实用的功能之一。很多人只知道它能分,却没养成日常使用的习惯。

怎么分屏?

  • 垂直分屏(左右分割):按 ⌘D,当前窗口会在右侧新建一个面板。
  • 水平分屏(上下分割):按 ⌘⇧D,当前窗口会在下方新建一个面板。

在分屏之间导航:

  • ⌘[ 切换到上一个面板,⌘] 切换到下一个面板。这是最常用的切换方式。
  • ⌘⌥+方向键 可以直接切换到指定方向的面板,比如 ⌘⌥→ 切到右边的面板。

调整面板大小:

  • 最简单的方式是直接拖动面板之间的分隔线。
  • 也可以用 ⌘⌥+方向键 微调面板的尺寸。

最大化面板:

  • ⌘⇧Enter 可以把当前面板临时最大化,再按一次恢复原样。当你需要全屏看日志时特别有用。

实际使用场景举例:

左边跑开发服务器(npm run dev),右边用 tail -f logs/error.log 盯着错误日志。代码改了之后,左边自动热更新,右边实时看到有没有报错,不用切来切去。

热键窗口

热键窗口(Hotkey Window)是一个「呼之即来、挥之即去」的浮动终端窗口。

它能干什么?

不管你当前在什么应用里,按一个快捷键,一个半透明的终端窗口就会从屏幕顶部(或底部)滑出来。再按一次就消失。不需要切换到 iTerm2,不需要新建标签页,随用随走。

怎么设置?

  1. 打开 iTerm2 → Preferences → Keys → Hotkey
  2. 点击「Create a Dedicated Hotkey Window」
  3. 在弹出的窗口中,设置你想要的热键。推荐用 ⌥Space(Option + 空格),这个组合几乎不会和其他软件冲突
  4. 可以选择窗口出现的位置(顶部、底部、居中),以及窗口的大小和透明度
  5. 建议开启「Floating Window」选项,让这个窗口浮在所有应用之上

为什么推荐用?

日常开发中经常需要临时执行一两条命令:查个 IP、看个进程、跑个一次性脚本。有了热键窗口,不需要离开当前编辑器或浏览器,⌥Space 敲完命令再 ⌥Space 回来,整个过程不超过三秒。

Natural Text Editing

这是 iTerm2 内置的一个按键预设方案,开启后终端里的文本编辑行为会变得和普通文本编辑器一样。默认情况下,在终端里移动光标是按字符移动的,很慢。开启这个预设后就能按单词跳、跳到行首行尾。

怎么开启?

  1. 打开 Preferences → Profiles → Keys → Key Mappings
  2. 点击左下角的「Load Preset...」
  3. 选择「Natural Text Editing」

开启后的关键行为:

  • ⌥← / ⌥→:按单词向前/向后跳。比如光标在 long-command-name 的末尾,按 ⌥← 一下就跳到 -name 前面。
  • ⌘← / ⌘→:直接跳到行首/行尾。修改一个很长的命令时,不用一直按着方向键了。
  • ⌥Delete / ⌥FnDelete:向前/向后删除整个单词。打错了一个单词,不用一下一下地按 Delete。

为什么这个很重要?

很多人觉得终端难用,很大一部分原因就是文本编辑体验差。Natural Text Editing 把这个体验补齐了,移动和删除的效率能提升好几倍。这是那种一旦用上就回不去的功能。

历史记录与自动补全

iTerm2 有几个和历史记录相关的快捷键,用好了能省很多重复输入。

命令历史弹窗:⌘⇧;

按这个组合键会弹出一个下拉列表,显示你最近输入过的命令。支持搜索过滤。昨天跑过的那个复杂命令?不需要在历史里翻半天,⌘⇧; 一搜就有。

自动补全建议:⌘;

输入命令的前几个字符后按 ⌘;,iTerm2 会根据你的历史记录给出补全建议。比如输入 git 然后按 ⌘;,它会列出你最近用过的 git 命令供你选择。

粘贴历史:⌘⇧H

iTerm2 会记录你复制粘贴过的内容。按 ⌘⇧H 可以查看粘贴历史,选择之前复制过的内容直接粘贴。

密码管理器集成

如果你使用 1Password 或 LastPass 等密码管理器,iTerm2 支持直接集成。

设置路径:Preferences → Profiles → General → Password Manager。配置好后,可以在终端中直接调用密码管理器填充密码,不用在终端和密码管理器之间来回切换。

这个功能不是每个人都用得上,但对于经常需要 SSH 登录远程服务器或操作数据库的开发者来说还是挺方便的。如果你不需要,跳过就好。

自定义别名与函数

快捷键解决的是 iTerm2 层面的效率问题,而自定义别名和函数解决的是 Shell 层面的效率问题。两者配合起来,日常操作才能真正快起来。

常用 alias

~/.zshrc 中添加以下别名,按类别整理。这里假设你已经按照本系列第二篇安装了 ezabatfdripgrep 等现代工具。

bash
# 文件操作
alias ll='eza -la --icons --git'
alias lt='eza -la --icons --tree --level=2'

# Git(如果不用 lazygit 的时候)
alias gs='git status'
alias gl='git log --oneline -10'
alias gd='git diff'
alias gp='git push'

# 目录跳转
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# 网络
alias myip='curl ifconfig.me'
alias flush='sudo dscacheutil -flushcache'

# 工具
alias cat='bat --paging=never'
alias find='fd'
alias grep='rg'

几点说明:

  • lleza 替代了 ls -la,支持图标显示和 Git 状态。
  • lt 会以树形结构展示当前目录,限制两层深度,不会刷屏。
  • ......... 这组别名省去了反复敲 cd 的麻烦,非常高频。
  • 工具类别名把传统命令替换成了更快的现代替代品。bat 替代 cat 有语法高亮,fd 替代 find 速度更快,rg 替代 grep 递归搜索快得多。

改完 ~/.zshrc 后记得 source ~/.zshrc 让配置生效。

编写 zsh function

别名(alias)适合简短的命令替换,但它有一个局限:不能接收参数。当你需要更灵活的逻辑时,就要用到 zsh function。

alias 和 function 的区别:

  • alias 只做简单的文本替换,不支持参数。
  • function 是真正的函数,可以接收 $1$2 等参数,可以写条件判断和循环。

下面是几个日常开发中非常实用的函数。同样添加到 ~/.zshrc 中即可。

bash
# 快速创建并进入目录
mkcd() {
  mkdir -p "$1" && cd "$1"
}

# 在当前目录启动一个简单的 HTTP 服务器
serve() {
  python3 -m http.server "${1:-8000}"
}

# 快速查找文件并打开
vf() {
  local file
  file=$(fzf --preview 'bat --style=numbers --color=always {}')
  [ -n "$file" ] && ${EDITOR:-vim} "$file"
}

# 快速 clone 并进入项目
clone() {
  git clone "$1" && cd "$(basename "$1" .git)"
}

逐个解释:

  • mkcd project-name — 一条命令完成「创建目录 + 进入目录」,不用分两步操作。mkdir -p 还会自动创建中间缺少的父目录。
  • serve — 在当前目录快速启动一个 HTTP 服务器,默认端口 8000。可以 serve 3000 指定端口。临时分享静态文件或者前端调试时特别好用。
  • vf — 用 fzf 模糊搜索文件,右侧实时预览文件内容(用 bat 渲染),选中后用编辑器打开。比反复 ls 然后 vim xxx 快太多了。
  • clone https://github.com/user/repo.git — clone 完自动进入项目目录,少敲一次 cd

实用函数示例

再来几个更具体的场景化函数:

bash
# 查天气(需要联网)
weather() {
  curl -s "wttr.in/${1:-Beijing}?lang=zh"
}

# 清理 Docker 资源
docker_clean() {
  docker system prune -af --volumes
  echo "Docker 清理完成"
}

# 查看端口占用
port() {
  lsof -i :"$1"
}

用法:

  • weather — 直接输入显示北京天气,weather Shanghai 显示上海天气。wttr.in 是一个免费天气服务,支持中文显示。
  • docker_clean — 一键清理所有未使用的 Docker 镜像、容器、网络和卷。磁盘空间不够的时候用。
  • port 8080 — 查看哪个进程占用了 8080 端口。开发时经常遇到端口被占用的情况,用这个比记 lsof 的参数快多了。

Git 终端工作流

前面讲了别名和函数来简化 Git 操作,但如果你日常频繁使用 Git(大部分开发者都是),还有一个更好的选择:lazygit。它是一个终端里的 Git 图形化界面,用键盘操作,比命令行直观,比 GUI 工具快。

lazygit 安装

bash
brew install lazygit

安装完成后,在任意 Git 仓库目录下输入 lazygit 即可启动。

基本操作

下面用一个完整的日常工作流来演示 lazygit 的使用。

1. 打开项目

bash
cd ~/projects/my-project
lazygit

进入后你会看到一个分屏界面,左侧是文件状态,右侧是差异内容。

2. 查看状态

主界面会直接显示所有变更的文件。修改过的文件、新增的文件、删除的文件一目了然,不用再敲 git status

3. 暂存文件

用方向键导航到想暂存的文件,按 Space 暂存单个文件。如果想暂存所有文件,按 a(全选暂存)。暂存后的文件会从「Unstaged」移到「Staged」区域。

4. 提交

c 打开提交信息输入框,输入提交信息后按 Enter 确认提交。就这么简单,不需要 git commit -m "..."

5. 推送

P(大写,即 Shift+P)推送到远程。lazygit 会显示推送进度。

6. 拉取

p(小写)从远程拉取最新代码。

7. 查看日志

l 进入日志视图,可以看到完整的提交历史。在某个 commit 上按 Enter 可以查看该 commit 的详细差异。

8. 分支操作

b 进入分支列表,可以看到本地和远程的所有分支。按 n 创建新分支,按 Space 切换到选中的分支。

总结一下最常用的操作:

操作按键说明
暂存文件Space暂存/取消暂存当前文件
暂存全部a暂存所有变更
提交c输入 commit message 并提交
推送Ppush 到远程
拉取ppull 远程代码
查看日志l打开提交历史
分支列表b查看/切换/创建分支

进阶用法

lazygit 不只是能做基本的 add/commit/push,它对 Git 的高级操作支持也很好。

交互式 rebase

在日志视图(按 l 进入)中,用方向键选择要操作的 commit。按 e 标记为 rebase 编辑点,可以标记多个。标记完后按 r 开始交互式 rebase。在 rebase 过程中,可以对每个 commit 选择 pick、squash、edit 等操作。

Cherry-pick

在日志视图中,找到要搬运的 commit,按 C(大写)复制该 commit。然后切换到目标分支,按 V(大写)粘贴(cherry-pick)。比手动复制 commit hash 再 git cherry-pick 直观多了。

解决冲突

当 merge 或 rebase 出现冲突时,lazygit 会高亮显示冲突文件。按 Enter 可以用配置的编辑器打开冲突文件进行手动解决。解决完毕后,回到 lazygit 按 c 完成提交。如果想放弃这次操作,按 Esc 退出。

Stash 管理

s 可以把当前的变更 stash 起来(暂存到栈上)。按 S(大写)弹出(pop)最近的 stash。在 stash 列表中可以看到所有 stash 记录,选择某一条按 g 可以 drop 掉它。

掌握这些之后,日常终端操作应该顺手多了。如果你还想折腾点更省事的玩法,最后一篇在等你。