你有没有想过,为什么《哈利波特》里的巫师们要花好几年学习各种咒语?
明明挥一下魔杖就能发光,为什么还要记住「Lumos」这个词?因为咒语是魔法世界的快捷键——你可以笨拙地描述"我想让魔杖发光",也可以干脆利落地念出一个词直接实现。
终端也是一样。
很多程序员用了好几年命令行,还在一个字母一个字母地敲命令、用鼠标选中复制粘贴、手动 cd 进层层嵌套的目录。这就像一个巫师每次施法都要念一大段咒语说明书——能用,但蠢。
今天这篇文章,就是你的《标准咒语书》第一册。
还记得邓布利多的冥想盆吗?把记忆倒进去,需要的时候随时提取回顾。
你的终端里也藏着一个冥想盆——命令历史。只不过大多数人只会用方向键 ↑ 一条条翻,像在一堆记忆里大海捞针。
这是我最想分享的技巧,因为它简单到离谱,但知道的人出奇地少:
先输入命令的开头几个字母,再按方向键 ↑,就只会搜索以这些字母开头的历史命令。
比如你想找之前用过的某条 git 命令,但 git 命令你敲了几百条。别傻傻地按 ↑ 翻了,直接输入 git co,然后按 ↑,终端只会在以 git co 开头的命令里跳转。
$ git co↑
# 自动变成:git commit -m "fix: 修复登录bug"
# 再按 ↑:git checkout develop
# 再按 ↑:git config --global user.name "xxx"这个技巧在 Zsh 里默认就能用。如果你用的是 Bash,需要在 ~/.inputrc 里加两行:
"\e[A": history-search-backward
"\e[B": history-search-forward如果说方向键 ↑ 是在记忆里翻页,那 Ctrl+R 就是阿瓦达索命般的精准打击——直接搜。
按下 Ctrl+R,终端进入反向搜索模式,你输入任意关键词,它会实时匹配历史命令。不用记命令开头是什么,只要记得命令里有什么词就行。
(reverse-i-search)`docker': docker exec -it mysql_container /bin/bash找到了?按 Enter 直接执行,按方向键 → 先编辑再执行。没找对?继续按 Ctrl+R 往前翻。
这招配合后面要说的 fzf,会进化成「开挂模式」。
《火影忍者》里的影分身之术为什么厉害?因为简短的几个字就能召唤出一大堆分身。
终端里也有类似的东西,叫历史展开(History Expansion):
咒语 | 效果 | 实战场景 |
|---|---|---|
!! | 重复上一条命令 | 权限不够时:sudo !! |
!$ | 上条命令的最后一个参数 | mkdir /some/long/path → cd !$ |
!string | 执行最近以 string 开头的命令 | !git 重复上次的 git 操作 |
^old^new | 把上条命令的 old 替换成 new | 打错字了:cat /etc/hosst → ^hosst^hosts |
其中 sudo !! 是最实用的一个。每次敲完一长串命令发现权限不够,不用重敲,直接 sudo !! 收工。
很多人编辑命令行的方式是:发现打错了 → 用方向键一格一格移过去 → 删掉 → 打对的。
这就像霍格沃茨学生在走廊里一步一步走,而忘了自己会「幻影移形」。
Mac 终端默认使用 Emacs 风格的键绑定,记住这几个核心的,够用一辈子:
移动类
Ctrl + A:跳到行首(A = 开头)Ctrl + E:跳到行尾(E = End)Ctrl + F:前进一个字符(F = Forward)Ctrl + B:后退一个字符(B = Backward)Option + F:前进一个单词(⚠️ 需先配置,见下方)Option + B:后退一个单词(⚠️ 需先配置,见下方)Mac 用户注意:如果你按
Option + F输出的是ƒ,按Option + B输出的是∫,这是正常的——Mac 默认把 Option 键用于输入特殊字符。需要手动配置:
Esc+配置完重启终端,Option 组合键就能用了。
截图3:Option 键配置界面 - Terminal.app 或 iTerm2 的设置位置
删除类
Ctrl + W:删除前一个单词(最常用!)Ctrl + U:删除到行首Ctrl + K:删除到行尾(K = Kill)Ctrl + Y:粘贴刚才删除的内容(Y = Yank)举个例子,你敲了这么一行:
docker run -it --name my_container -v /path/to/local:/path/to/contaner ubuntu发现 contaner 拼错了。菜鸟做法:按 ← 按 20 下。高手做法:Ctrl+W 删掉整个词,重新打。
更高手的做法:Ctrl+A 跳到开头,Ctrl+K 删掉整行,重新来(开玩笑的,有时候真不如重打)。
当你要编辑一条特别长的命令时,在命令行里改来改去太痛苦了。
按 Ctrl+X 然后按 Ctrl+E,终端会把当前命令行的内容扔进你的默认编辑器(通常是 vim 或 nano)。在编辑器里舒舒服服改完保存,命令自动执行。
这招在写复杂的 for 循环、管道组合时特别有用。
如果说前面的技巧是学会了基础咒语,那 fzf 就是你的魔杖升级——从普通魔杖变成接骨木魔杖。
fzf 全称 fuzzy finder,模糊查找器。它能让你在海量数据中快速定位目标,就像《刺客信条》里的鹰眼视觉,世界变成灰色,只有目标在发光。
brew install fzf
$(brew --prefix)/opt/fzf/install # 重要!安装 shell 集成安装完重启终端,你获得了三个超能力:
还记得刚才说的 Ctrl+R 反向搜索吗?装了 fzf 之后,Ctrl+R 直接进化成可视化的模糊搜索界面:
❯
695/695
> docker exec -it mysql_container bash
docker-compose up -d
docker ps -a
docker build -t myapp .
支持模糊匹配,输入 dkex 也能找到 docker exec。上下键选择,Enter 执行。比原生 Ctrl+R 不知道高到哪里去了。
按 Ctrl+T,fzf 会搜索当前目录下的所有文件,选中后自动插入路径。
再也不用 ls 一层层看、手动打路径了。尤其是当你要打开一个藏在 src/components/common/utils/ 里的文件时,Ctrl+T 输入 utils,几秒搞定。

按 Alt+C(Mac 上是 Esc+c),搜索目录并直接 cd 进去。
这个配合下面要说的 zoxide,基本上可以告别手动 cd 了。

fzf 支持一套简洁的搜索语法:
word:模糊匹配'word:精确匹配(前面加单引号)^word:以 word 开头word$:以 word 结尾!word:不包含 word比如你想找所有 .tsx 结尾但不包含 test 的文件:tsx$ !test
如果说 fzf 是升级魔杖,那 Oh My Zsh 就是给你的终端穿上一整套钢铁侠战甲。
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"装完之后,你获得了 300+ 个插件和 140+ 个主题的访问权限。但别贪心,插件装太多会拖慢启动速度。
打开 ~/.zshrc,找到 plugins= 这一行,改成:
plugins=(git z zsh-autosuggestions zsh-syntax-highlighting)git 插件(内置):提供了一大堆 Git 别名,常用的有:
gst = git statusgco = git checkoutgcm "msg" = git commit -m "msg"gp = git pushgl = git pull用几天就形成肌肉记忆了。
z 插件(内置):这个插件解决的是一个真实痛点——你每天都要 cd 进某些目录,但路径又臭又长:
cd /Users/zhangsan/Projects/company/standard-chartered/mobile-app/src/components每次都打这么长,疯了吧?
z 插件会默默学习你的 cd 习惯,记住你常去的目录。用一段时间后,你只需要:
z components # 直接跳转到上面那个目录
z mobile # 或者用路径中的任意关键词
z sc src # 甚至可以用多个关键词缩小范围它的原理是「frecency」算法——综合考虑访问频率(frequent)和最近程度(recency)。你最近常去的目录权重最高。
这个插件用几天就回不去了,真的。
zsh-autosuggestions(需额外安装):这个插件是《少数派报告》里的预测系统——它会根据你的历史命令,实时显示灰色的建议。按 → 接受整条建议,按 Ctrl+→ 只接受一个单词。
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
zsh-syntax-highlighting(需额外安装):实时语法高亮,命令对了显示绿色,错了显示红色。让你在按 Enter 之前就知道有没有打错。
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting注意:zsh-syntax-highlighting 必须放在 plugins 列表的最后一个,否则可能不生效。
如果你想让终端看起来很酷(而且信息量大),装 Powerlevel10k。
这个主题的名字本身就是个彩蛋——《龙珠Z》里战斗力 10000 的超级赛亚人级别。用了它,你的终端提示符会显示当前目录、Git 分支、Node 版本等信息,而且渲染速度极快,不会有延迟感。
⚠️ 先装字体,否则会乱码! Powerlevel10k 用了很多特殊图标,需要安装专用字体:
字体装好后,再安装主题:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k然后在 ~/.zshrc 里设置 ZSH_THEME="powerlevel10k/powerlevel10k",重启终端会自动运行配置向导。我之前截图的其实都是已经使用了这个主题的。
Unix 的那些经典命令——ls、cat、find、grep——诞生于几十年前。它们能用,但不够好用。
最近几年,一批用 Rust 编写的现代工具正在革新这些命令。它们的共同特点是:更快、更好看、更智能。
前面说的 z 插件已经很好用了,但 zoxide 更强——用 Rust 重写,速度更快,而且支持 fzf 交互式选择。
brew install zoxide
echo 'eval "$(zoxide init zsh)"' >> ~/.zshrc基本用法和 z 一样:z 关键词 跳转目录。但它多了一招:zi 关键词 会弹出 fzf 界面,当有多个匹配目录时让你交互式选择,而不是盲猜。
cat 命令只能傻傻地输出文件内容。bat 会自动加上语法高亮、行号,还能显示 Git 修改状态。
brew install bat
alias cat='bat --paging=never'ls 的输出太素了。eza(注意不是 exa,exa 已经停止维护了)支持彩色输出、文件图标、Git 状态。
brew install eza
alias ls='eza --icons'
alias ll='eza -la --icons --git'
alias lt='eza --tree --icons --level=2'fd:比 find 快 5-10 倍,语法更人性化。fd pattern 就能递归搜索。rg(ripgrep):比 grep 快 10 倍以上,自动忽略 .gitignore 里的文件。brew install fd ripgrep这两个工具还能和 fzf 配合,让搜索体验更上一层楼。
最后分享一下我的核心配置,供参考:
# 历史记录优化
HISTSIZE=50000
SAVEHIST=50000
setopt SHARE_HISTORY # 多终端共享历史
setopt HIST_IGNORE_ALL_DUPS # 忽略重复命令
setopt HIST_IGNORE_SPACE # 空格开头的命令不记录(隐私保护)
# 实用选项
setopt AUTO_CD # 直接输入目录名就能 cd
setopt CORRECT # 命令纠错
# 别名
alias ..='cd ..'
alias ...='cd ../..'
alias ls='eza --icons'
alias ll='eza -la --icons --git'
alias cat='bat --paging=never'
alias vim='nvim'
# 一个实用函数:创建目录并进入
mkcd() { mkdir -p "$1" && cd "$1"; }
# fzf 配置
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'
export FZF_DEFAULT_OPTS='--height=40% --layout=reverse --border'回到开头的比喻:终端是现代程序员的魔法世界,命令是咒语,快捷键是咒语的简化版。
一个刚入学霍格沃茨的巫师,可能要念完整的「Wingardium Leviosa」才能让羽毛飞起来;但一个熟练的巫师,可能只需要心念一动、魔杖一挥。
今天分享的这些技巧,就是帮你从「念完整咒语」进化到「挥一下魔杖」的过程。
从记住 Ctrl+R 开始,慢慢地,你会发现自己敲命令越来越快,手指越来越少离开键盘,终端不再是一个黑漆漆的、让人害怕的地方,而是一个你能掌控的、高效的工作空间。
就像《黑客帝国》里的 Neo,一开始看 Matrix 只能看到绿色代码雨,后来能直接看到金发美女。
终端效率的提升也是这样——当你熟练掌握这些技巧后,看着命令行,你看到的不再是一堆字符,而是无限的可能性。
如果你觉得有用,欢迎转发给还在一个字母一个字母敲命令的朋友。毕竟,独乐乐不如众乐乐——让他们也体验一下「念咒语」的快感。
[1] MesloLGS NF Regular.ttf: https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf
[2] MesloLGS NF Bold.ttf: https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf
[3] MesloLGS NF Italic.ttf: https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf
[4] MesloLGS NF Bold Italic.ttf: https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf